动态SQL引发错误提示标量变量未定义

时间:2018-11-23 02:16:32

标签: sql sql-server

我正在通过C#代码将批量数据复制到SQL Server(表名称:TmpTable),然后要使用以下存储过程更新表:

ALTER PROCEDURE dbo.sp_Update_Locations
    (@lupdatedNoRow VARCHAR(10) OUT)
AS
    SET NOCOUNT ON
BEGIN

    DECLARE @mttblfaximages3_sql NVARCHAR(500) ='UPDATE testAdmin.dbo.mttblFaxImages2 set fRemoteStorageLocation = temp.RemoteStorageLocation, fRemoteImageName = temp.RemoteImageName  from testAdmin.dbo.mttblFaxImages2 T INNER JOIN #TmpTable Temp ON (T.fFaxId=Temp.PrimaryId  AND T.fFaxPageId=Temp.SecondaryId); DROP TABLE #TmpTable;SELECT @lupdatedNoRow = cast(@@rowcount as VARCHAR)' 

    EXEC sp_executesql @mttblfaximages3_sql
            select @lupdatedNoRow

END

我看到更新工作正常,但之后c#引发异常

  

必须声明标量变量“ @lupdatedNoRow”

我想返回更新的行数。

我应该如何修改存储过程以返回更新的行数?

1 个答案:

答案 0 :(得分:2)

您需要定义变量@lupdatedNoRow并将其传递到sp_executesql

EXEC sp_executesql @mttblfaximages3_sql, 
                   N'@lupdatedNoRow varchar(10) OUTPUT', 
                   @lupdatedNoRow OUTPUT
select @lupdatedNoRow