将参数添加到动态SQL查询中

kbv*_*hnu 1 sql stored-procedures dynamic-sql sql-server-2008

我的sql程序是

 SET @query='UPDATE '+@tbl+' SET  auth_Date='''+@authDate+'''
    ,authorized_By_ID=@AuthID
    ,authorized=1 WHERE '+@col+'=@Id;
    IF(@@ERROR=0) SET @reVal=1 ELSE SET @reVal=-1' 


    EXECUTE sp_executesql @query, N'@reVal int OUTPUT', 
    @reVal,N'@AuthID int',@AuthID,N'@Id int',@Id
Run Code Online (Sandbox Code Playgroud)

这里@AuthID是Datetime,@ AuthID和@Id是int

1)我如何传递参数.2)有一个错误即将来临 Conversion failed when converting date and/or time from character string.

Rem*_*anu 5

您按照声明的顺序在第二个参数中传递参数定义,然后是参数:

EXECUTE sp_executesql @query, 
    N'@AuthID int, @Id int, @reVal int OUTPUT', 
    @AuthID, @Id, @reVal OUTPUT;
Run Code Online (Sandbox Code Playgroud)

您没有将@authDate作为参数传递的原因是什么?特别是因为语境设置导致转换为字符串时,日期时间类型非常容易出错.

最后,您应该使用TRY/CATCH块而不是@@ ERROR检查.