使用外键添加两行 - SQL
我正在烦恼如何在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以在一个批处理语句中执行此操作:
You can do this in one batch statement:
查看 http://msdn.microsoft.com/en -us/library/aa259185%28SQL.80%29.aspx
Look at http://msdn.microsoft.com/en-us/library/aa259185%28SQL.80%29.aspx
您可以使用 T-SQL
scope_identity
从第一个INSERT
语句返回新 ID。在第一次
INSERT
之前,声明一个变量来保存新 ID 的值:在第一次
INSERT
之后,添加以下内容以设置该变量的值:SELECT @ReturnValue =scope_identity()
然后,您可以在第二个
INSERT
中使用@ReturnValue
变量代替:You can use the T-SQL
scope_identity
to return the new ID from the firstINSERT
statement.Before your first
INSERT
, declare a variable to hold the value of the new ID: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 secondINSERT
in place of :或者您可以使用输出。当您需要返回多个字段或一开始就进行多行插入时,这会更有效。如果要处理多行,则可以使用表变量而不是 int 变量。
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.