-1

我正在尝试获取最后一次 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();

但我得到一个空异常错误:

你调用的对象是空的

谁能帮我解决这个问题?

4

2 回答 2

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);
于 2013-07-26T16:53:38.970 回答
2

在尝试设置之前,请确保您的脚本中有此内容。

声明 @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 是整数字段,否则相应地设置类型

于 2013-07-26T16:53:02.607 回答