我正在尝试为最后一次SQL插入获取唯一的自动生成密钥: -
INSERT [db].[xyyz] (x,y,z) values (@x,@y,@z)
SET @RowId = SCOPE_IDENTITY();
command.Parameters.AddWithValue("@x", x);
command.Parameters.AddWithValue("@y", y);
command.Parameters.AddWithValue("@z", z);
这样,我可以访问其他表并使用相同的RowId来插入当前事务的数据。因此建立所有表和单个事务之间的关系。
然而我收到错误:
必须为@RowId
声明一个标量变量
我相信RowId之间的逻辑链接和SQL表中的含义之间的逻辑关联是否已被破坏...任何人都可以帮我解决这个问题吗?
我在C#中工作,而不是在SQL Server中工作。
更新:我无法获取代码以将RowID
值存储在变量中。我试过了:
Int32 newRowID = 0;
... SQL QUERY..
...
newRowID = (Int32)command.ExecuteScalar();
但是我得到一个空的异常错误:
对象引用未设置为对象的实例
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:3)
“必须为@RowId声明一个标量变量。”
简单声明:
declare @RowID int;
INSERT [db].[xyyz] (x,y,z) values (@x,@y,@z)
SET @RowId = SCOPE_IDENTITY();
command.Parameters.AddWithValue("@x", x);
command.Parameters.AddWithValue("@y", y);
command.Parameters.AddWithValue("@z", z);
答案 1 :(得分:2)
在尝试设置之前,请确保在脚本中有此内容。
DECLARE @RowID INT
所以你的剧本就是;
DECLARE @RowID INT;
INSERT [db].[xyyz] (x,y,z) values (@x,@y,@z)
SET @RowId = SCOPE_IDENTITY();
command.Parameters.AddWithValue("@x", x);
command.Parameters.AddWithValue("@y", y);
command.Parameters.AddWithValue("@z", z);
这假设你的ID是和整数字段,否则相应地设置类型