分析器中的存储过程错误
本文关键字:错误 存储过程 分析器 | 更新日期: 2023-09-27 18:08:22
我正在运行一个具有objectdatasource和gridview的程序。我的Update方法看起来好像正确地通过了程序。但是当它到达数据库时,有一些语法错误。
这是存储过程
USE [starch]
GO
/****** Object: StoredProcedure [dbo].[Starch_Update_KPCodes] Script Date: 09/13/2011 11:02:1 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[Stored_proc_name]
(
@bookcode as varchar(15),
@PC as varchar(10),
@EReader as varchar(10),
@Tablet as varchar(10),
@Mobile as varchar(10)
)
AS
Begin
Update storedproc
SET
Valid_Ans_Nbr = @PC
where
kp_Column=82 and BookCode = @bookcode
Update
Valid_Answers
SET
Valid_Ans_Nbr = @EReader
where
kp_Column=83 and BookCode = @bookcode
Update
Valid_Answers
SET
Valid_Ans_Nbr = @Tablet
where
kp_Column=84 and BookCode = @bookcode
Update
alid_Answers
Set
Valid_Ans_Nbr = @Mobile
where
kp_Column=85 and BookCode = @bookcode
END
然后是SQL profiler中传递给数据库的内容
exec sp_executesql N'Starch_Update_KPCodes',
N'@bookcode nvarchar(8),
@PC nvarchar(1),
@EReader nvarchar(1),
@Tablet nvarchar(1),
@Mobile nvarchar(1)',
@bookcode=N'A0027232',
@PC=N'1',
@EReader=N'1',
@Tablet=N'1',
@Mobile=N'1'
我认为部分原因是我删除并重新创建了存储过程几次。这一行
N'@bookcode nvarchar(8),@PC nvarchar(1),@EReader nvarchar(1),
@Tablet nvarchar(1),@Mobile nvarchar(1)'
可能属于存储过程的某个缓存版本。
我已经检查了objectdatasource的更新事件,以确保它有正确的参数。
如何去掉传递给存储过程的额外文本?
您可能需要将命令类型设置为存储过程。
您现有的代码将尝试执行裸语句Starch_Update_KPCodes
,并且您传入的参数在该语句中任何地方都未使用。
要通过sp_executesql
执行此操作,语句需要为
exec sp_executesql N'EXEC Starch_Update_KPCodes
@bookcode=@bookcode,
@PC=@PC,
@EReader=@EReader,
@Tablet=@Tablet,
@Mobile=@Mobile',
N'@bookcode nvarchar(8),
@PC nvarchar(1),
@EReader nvarchar(1),
@Tablet nvarchar(1),
@Mobile nvarchar(1)',
@bookcode=N'A0027232',
@PC=N'1',
@EReader=N'1',
@Tablet=N'1',
@Mobile=N'1'
与直接调用存储过程相比,这有点傻!
我不知道你的问题到底是什么,但是....
sp_executesql
的参数定义。
N'@bookcode nvarchar(8),
@PC nvarchar(1),
@EReader nvarchar(1),
@Tablet nvarchar(1),
@Mobile nvarchar(1)',
为参数赋值。
@bookcode=N'A0027232',
@PC=N'1',
@EReader=N'1',
@Tablet=N'1',
@Mobile=N'1'
没有额外的文本。