我有以下适用于 Oracle 的代码:
OracleCommand command = conn.CreateCommand(); // conn is my connection
string sql = "INSERT INTO table_name (ID, NAME, GENDER) VALUES (1, 'JOHN', 'M') RETURNING ID INTO :returnedId";
command.CommandText = sql;
command.Parameters.Add(new OracleParameter("returnedId", OracleDbType.Decimal));
command.ExecuteNoQuery();
我需要将其移植到 SQL Server。这就是我正在做的:
SqlCommand command = conn.CreateCommand(); // conn is my connection
string sql = "INSERT INTO table_name (Id, Name, Gender) OUTPUT Inserted.Id As returnedId VALUES (1, "JOHN", "M")";
command.CommandText = sql;
command.Parameters.Add(new SqlParameter("returnedId", SqlDbType.Decimal));
command.ExecuteNoQuery();
该代码给我以下错误:
the parameterized query expects the parameter which was not supplied: @returnedId
将 RETURNING
和 :returnedId
子句从 Oracle 迁移到 SQL Server 的正确方法是什么?
我尝试了 OUTPUT Inserted.Id As @returnedId
以及将 SqlParameter
更改为 "@returnedId"
但没有成功。
最佳答案
OUTPUT SQL Server 等同于RETURNING INTO .
INSERT INTO table_name (ID, NAME, GENDER)
OUTPUT INSERTED.ID
VALUES (1, 'JOHN', 'M') ;
和C#:
Int32 outputID = (Int32)command.ExecuteScalar();
关于c# - Oracle 返回 :variable equivalent using SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23485002/