sql - 动态 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”
我想返回更新的行数。
我应该如何修改我的存储过程以返回更新的行数?
解决方案
您需要定义并将变量传递@lupdatedNoRow
到sp_executesql
EXEC sp_executesql @mttblfaximages3_sql,
N'@lupdatedNoRow varchar(10) OUTPUT',
@lupdatedNoRow OUTPUT
select @lupdatedNoRow
推荐阅读
- azure - 天蓝色服务中的“设备”服务是什么?
- html - 如何将一个 div 元素的 id 传递给另一个在循环中执行的提供的第二个?
- android - 键盘在颤动中打开时UI溢出
- vb.net - 如何将 Datagridview 的索引设置为 0
- reactjs - 如何在 React Native 中设置状态数组
- regex - 用于匹配特定数字模式的正则表达式
- javascript - 如何使用 JS 选择一个选择框的选项值?
- android - api.ai 进程开始监听时录制音频
- java - 如何创建一个对应于从 2 到 100 的每个数字的列表,该列表将包含数组中作为其倍数的数字?
- ios - 快速停止用户交互时滚动视图中的自动滚动