首页 > 解决方案 > 动态 SQL 抛出错误,抱怨未定义标量变量

问题描述

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

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”

我想返回更新的行数。

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

标签: sqlsql-server

解决方案


您需要定义并将变量传递@lupdatedNoRowsp_executesql

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

推荐阅读