gpt4 book ai didi

sql - 在 T-Sql 插入语句中使用 Row Constructor 语法有什么好处?

转载 作者:行者123 更新时间:2023-12-04 10:17:49 26 4
gpt4 key购买 nike

在 SQL Server 2008 中,您可以使用 Row Constructor 语法通过单个 insert 语句插入多行,例如:

insert into MyTable (Col1, Col2) values
('c1v', 0),
('c2v', 1),
('c3v', 2);

除了可读性之外,这样做是否有好处,而不是为每个记录使用一个插入语句?

最佳答案

是的,两者之间存在相当大的性能差异:

declare @numbers table (n int not null primary key clustered);

insert into @numbers (n)
values (0)
, (1)
, (2)
, (3)
, (4);


declare @numbers table (n int not null primary key clustered);

insert into @numbers (n) values (0);
insert into @numbers (n) values (1);
insert into @numbers (n) values (2);
insert into @numbers (n) values (3);
insert into @numbers (n) values (4);

事实每单 insert语句有它自己的隐式事务来保证这一点。您可以通过查看每个语句的执行计划或使用 set statistics time on; 对执行进行计时来轻松地向自己证明这一点。 .有一个固定成本与“设置”和“拆除”每个单独插入的上下文相关联,第二个查询必须支付五次这个惩罚,而第一个只支付一次。

list 方法不仅效率更高,而且您还可以使用它来构建派生表:
select *
from (values
(0)
, (1)
, (2)
, (3)
, (4)
) as Numbers (n);

这种格式绕过了 1,000 个值的限制,并允许您在插入列表之前加入和过滤列表。人们可能还会注意到我们不受 insert 的约束。声明!作为事实上的表,此构造可用于表引用有效的任何地方。

关于sql - 在 T-Sql 插入语句中使用 Row Constructor 语法有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9931455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com