我希望能够使用一条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 Server2000,但如果可能的话,我对相当便携的东西很感兴趣。
更新:感谢所有回复的人。总而言之,SQL标准似乎有一个多插入,这正是我想要的,但在我的环境中不受支持。因此,为了简单明了,我将继续使用(a)。
发布于 2009-09-08 01:28:32
SQL标准提供了多个值列表,每个列表都有自己的一组括号,这是(B)的一个次要变体:
INSERT INTO "#t" VALUES (1), (2), (3);不过,并不是所有的DBMS都支持这种表示法,如果SQL Server2000支持这种表示法,我会感到惊讶。
如果代码是只执行一次而不重做的“设置”代码(正如问题所暗示的那样),那么担心效率的最大化通常是不成熟的优化。让它变得简单明了。使用机制(a)。
发布于 2009-09-08 01:23:39
(b)有没有可行的变种?
INSERT一次只能插入一行。如果您想插入多个行,则必须多次调用它。所以简而言之,no.
或者是否有像(c)这样的方法,需要更少的输入?
可能有一种执行联合的方法,但您应该意识到,执行所有这些联合将需要大量内存,并且比多次调用INSERT要慢得多。
如果您的数据是硬编码的,并且您希望进行大容量导入,那么您可能需要查看BULK INSERT。您可以使用BULK INSERT读取CSV data。
发布于 2009-09-08 01:24:54
那么,您可以插入到一个临时表中,然后执行以下操作:
INSERT INTO ...
SELECT FROM ...https://stackoverflow.com/questions/1391519
复制相似问题