分析器中的存储过程错误

本文关键字:错误 存储过程 分析器 | 更新日期: 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'    

没有额外的文本