使用 SqlClient class 时如何在 SQL 服务器中获取插入的 ID?
How can I get inserted ID in SQL Server while using SqlClient class?
所以这是 post 的延续:
Best way to get identity of inserted row?
post 提议,并且我同意,使用 Inserted
功能来安全地 return 插入 id
列。
在实现这个功能时,.net framework SqlClient
似乎不支持这个功能,并且在尝试执行命令时失败,我得到以下异常:
System.Data.SqlClient.SqlException: 'Cannot find either column "INSERTED" or the user-defined function or aggregate "INSERTED.Id", or the name is ambiguous.'
我正在使用:
return (T)command.ExecuteScalar();
查询所在的位置:
INSERT INTO MyTable
OUTPUT INSERTED.Id
(Description)
VALUES (@Description)
而 table 只包含
ID (identity int)
Description (varchar(max))
如果做不到,是否有其他安全的方法可以避免在中间使用可能影响性能的变量?
谢谢
您做的一切都正确,但是您放错了 OUTPUT
子句:它在列列表之后和 VALUES
之前,即
INSERT INTO MyTable (Description)
OUTPUT INSERTED.Id
VALUES (@Description)
所以这是 post 的延续: Best way to get identity of inserted row?
post 提议,并且我同意,使用 Inserted
功能来安全地 return 插入 id
列。
在实现这个功能时,.net framework SqlClient
似乎不支持这个功能,并且在尝试执行命令时失败,我得到以下异常:
System.Data.SqlClient.SqlException: 'Cannot find either column "INSERTED" or the user-defined function or aggregate "INSERTED.Id", or the name is ambiguous.'
我正在使用:
return (T)command.ExecuteScalar();
查询所在的位置:
INSERT INTO MyTable
OUTPUT INSERTED.Id
(Description)
VALUES (@Description)
而 table 只包含
ID (identity int)
Description (varchar(max))
如果做不到,是否有其他安全的方法可以避免在中间使用可能影响性能的变量?
谢谢
您做的一切都正确,但是您放错了 OUTPUT
子句:它在列列表之后和 VALUES
之前,即
INSERT INTO MyTable (Description)
OUTPUT INSERTED.Id
VALUES (@Description)