使用 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)