使用scope_identity时遇到一些麻烦

时间:2013-11-22 19:07:31

标签: c# sql sql-server scope-identity

我有两个表,一个包含名称,另一个包含与每个名称对应的费率和其他数据。在我向表A中插入一个新名称后,我想让新生成的PK现在用来插入我的其他表B中的费率。

我该怎么做?我在线阅读scope_identity,但我不确定如何使用它。

这是我到目前为止所做的:

SqlConnection con = new SqlConnection(pubvar.x);

SqlCommand command = con.CreateCommand();
command.CommandText ="Insert into A values('" +Name + "')";

SqlCommand command2 = con.CreateCommand();
command2.CommandText = "Insert into B values(....)";

SELECT SCOPE_IDENTITY();

con.Open();
command.ExecuteNonQuery();
con.Close();

1 个答案:

答案 0 :(得分:2)

考虑到你所描述的情况,我认为没有必要从数据库中返回身份。您只需在一个命令中发出两个语句:

using (var cnx = new SqlConnection(pubvar.x))
using (var cmd = new SqlCommand
{
    Connection = cnx,
    CommandText = @"
    insert into A (Name) values (@name)
    insert into B (A_ID, Rate) values (scope_identity(), @rate)
    ",
    Parameters =
    {
        new SqlParameter("@name", name),
        new SqlParameter("@rate", .5m) //sample rate
    }
})
{
    cnx.Open();
    cmd.ExecuteNonQuery();
}