我希望能够使用单个INSERT语句将一些值插入到表中,但是我无法确定最佳方法。我插入的数据是bootstrap(或硬编码)数据,即。在另一张表中没有。这是我到目前为止所尝试的内容。
create table #t (id int)
insert into #t values (1) --- (a)
insert into #t values (5) --- (a)
insert into #t values ((5), (3), (22)) --- (b)
insert into #t --- (c)
select 3 union all
select 5 union all
select 6 union all
select 8
(a)的代码工作正常,但每次插入只添加一个值。
(b)中的代码似乎是(a)对我的逻辑扩展(至少当我想到来自Perl或Java的初始化者时),但是不起作用。
(c)处的代码可以工作,可能更像SQL方式,但似乎很冗长。
(b)的变体是否有效?或者是否有像(c)这样的方法需要更少的打字?
我正在使用SQL Server 2000,但如果可能的话,我对那些相当便携的东西很感兴趣。
更新:感谢everynoe的回答。总之,似乎SQL标准有一个多插入,这就是我所追求的,但在我的环境中不受支持。所以我会坚持(a)简单明了。
答案 0 :(得分:0)
(b)的变体是否有效?
INSERT
一次只能插入一行。如果您想插入多行,则必须多次调用它。简而言之,不。
还是像(c)这样的方法 需要更少的打字?
执行联合可能有一种短暂的方式,但是你应该知道,执行所有这些联合将需要大量内存,并且比多次调用INSERT
要慢得多。
如果您的数据是硬编码的,并且您希望批量导入,则可能需要查看BULK INSERT
。您可以使用BULK INSERT
阅读CSV data。
答案 1 :(得分:0)
SQL标准提供了多个值列表,每个值都在其自己的括号中,这是(b)的一个次要变体:
INSERT INTO "#t" VALUES (1), (2), (3);
但并非所有DBMS都支持这种表示法,如果SQL Server 2000的话,我会感到惊讶。
如果代码是“设置”代码(如问题所示),执行一次而不重做,那么担心效率最高通常是不成熟的优化。简单明了。使用机制(a)。
答案 2 :(得分:-1)
好吧,您可以插入临时表,然后执行以下操作:
INSERT INTO ...
SELECT FROM ...