将INSERTion的值分组到表中

时间:2009-09-08 01:19:35

标签: sql sql-server sql-server-2000 insert

我希望能够使用单个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)简单明了。

3 个答案:

答案 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 ...