0

我有 2 个表,我想在其中一个接一个地插入数据。第一个表的主键在第二个。是否有任何 C# 函数,以便我可以将第一个表的主键插入到另一个表中,而无需任何选择查询?

4

3 回答 3

2

您可以使用执行插入并将标识值返回给调用者的存储过程来完成它。

CREATE PROCEDURE procedure1
AS
BEGIN
    DECLARE @id int;

    INSERT INTO [table1] (col1) VALUES ('Foo');
    SET @id = SCOPE_IDENTITY();
    INSERT INTO [table2] (col1, col2) VALUES (@id, 'Bar');

    RETURN @id;
END
于 2012-06-05T12:04:35.197 回答
1

您可能会考虑在插入语句中使用 OUTPUT 子句。

于 2012-06-05T14:39:00.380 回答
-1

不确定我是否理解您的问题,但我认为您想在不咨询服务器的情况下知道主键。

在这种情况下,您需要使用 guid 作为可以在 C# 中生成客户端的主键。标识列将不起作用,因为它们是由 sql server 生成的。

或者,您可以创建一个存储过程,在服务器上为您执行插入操作,并将客户端的身份留空。

更新 1

要从 sql server 获取最新生成的身份,您可以使用

SCOPE_IDENTITY

(这相当于 mysql_insert_id() )

还有一些其他选择,即

  • @@身份
  • SCOPE_IDENTITY()
  • IDENT_CURRENT

您可以在http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/阅读

于 2012-06-05T11:55:39.003 回答