使用外键添加两行 - SQL

发布于 2024-10-07 11:19:04 字数 499 浏览 4 评论 0原文

我正在烦恼如何在 1 个事务中添加 2 行,其中 1 行依赖于另一行。

INSERT INTO users (username) VALUES ('malcom.reynolds')

INSERT INTO spaceships (name, owner) 
VALUES ('Serenity', <<Malcom Reynold's row ID>>)

我这样做的原因是我正在使用的库不返回 rowid,我需要尽可能少地提交事务,因为我添加了几百万条记录!

只是为了记录我正在使用:

  • SQL Server 2008
  • Python
  • pyodbc

有什么想法吗? 真的很棒: )

I'm worndering how I can add 2 rows, of which 1 depends on another, in 1 transaction.

INSERT INTO users (username) VALUES ('malcom.reynolds')

INSERT INTO spaceships (name, owner) 
VALUES ('Serenity', <<Malcom Reynold's row ID>>)

Reason I an doing is that the library I'm using does not return the rowid, and I need to commit the transaction as less as possible as I'm adding over a few million records!

Just for the record I'm using:

  • SQL Server 2008
  • Python
  • pyodbc

Any idea? Would be really awesome :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

陌路黄昏 2024-10-14 11:19:04

您可以在一个批处理语句中执行此操作:

declare @key as int;
insert into users (username)
values ('malcom.reynolds');
set @key = (select scope_identity());
insert into spaceships (name, owner)
values ('Serenity', @key)

You can do this in one batch statement:

declare @key as int;
insert into users (username)
values ('malcom.reynolds');
set @key = (select scope_identity());
insert into spaceships (name, owner)
values ('Serenity', @key)
抱猫软卧 2024-10-14 11:19:04

查看 http://msdn.microsoft.com/en -us/library/aa259185%28SQL.80%29.aspx

INSERT INTO users (username) VALUES ('malcom.reynolds');

INSERT INTO spaceships (name, owner) 
VALUES ('Serenity', SCOPE_IDENTITY() )

Look at http://msdn.microsoft.com/en-us/library/aa259185%28SQL.80%29.aspx

INSERT INTO users (username) VALUES ('malcom.reynolds');

INSERT INTO spaceships (name, owner) 
VALUES ('Serenity', SCOPE_IDENTITY() )
白云不回头 2024-10-14 11:19:04

您可以使用 T-SQL scope_identity 从第一个 INSERT 语句返回新 ID。

在第一次 INSERT 之前,声明一个变量来保存新 ID 的值:

DECLARE @ReturnValue int;

在第一次 INSERT 之后,添加以下内容以设置该变量的值:

SELECT @ReturnValue =scope_identity()

然后,您可以在第二个 INSERT 中使用 @ReturnValue 变量代替:

INSERT INTO spaceships (name, owner) 
VALUES ('Serenity', @ReturnValue)

You can use the T-SQL scope_identity to return the new ID from the first INSERT statement.

Before your first INSERT, declare a variable to hold the value of the new ID:

DECLARE @ReturnValue int;

Right after your first INSERT, add this to set the value of that variable:

SELECT @ReturnValue = scope_identity()

Then, you can use the @ReturnValue variable in your second INSERT in place of :

INSERT INTO spaceships (name, owner) 
VALUES ('Serenity', @ReturnValue)
半世蒼涼 2024-10-14 11:19:04

或者您可以使用输出。当您需要返回多个字段或一开始就进行多行插入时,这会更有效。如果要处理多行,则可以使用表变量而不是 int 变量。

DECLARE @key int
insert into users (username)
output inserted.userid 
values ('malcom.reynolds'); 

insert into spaceships (name, owner) 
values ('Serenity', @key) 

Or you can use OUTPUT. This is hadnier when you need to return more than one field or are doing a multitrow insert to begin with. You can use a table variable if you are doing multiple rows instead of an int variable.

DECLARE @key int
insert into users (username)
output inserted.userid 
values ('malcom.reynolds'); 

insert into spaceships (name, owner) 
values ('Serenity', @key) 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文