首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将INSERTion的值分组到表中

将INSERTion的值分组到表中
EN

Stack Overflow用户
提问于 2009-09-08 01:19:35
回答 3查看 145关注 0票数 1

我希望能够使用一条insert语句将一些值插入到表中,但我在确定最佳方式时遇到了麻烦。我插入的数据是bootstrap (或硬编码)数据,即。在另一个表中不可用。这是我到目前为止尝试过的方法。

代码语言:javascript
复制
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)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-08 01:28:32

SQL标准提供了多个值列表,每个列表都有自己的一组括号,这是(B)的一个次要变体:

代码语言:javascript
复制
INSERT INTO "#t" VALUES (1), (2), (3);

不过,并不是所有的DBMS都支持这种表示法,如果SQL Server2000支持这种表示法,我会感到惊讶。

如果代码是只执行一次而不重做的“设置”代码(正如问题所暗示的那样),那么担心效率的最大化通常是不成熟的优化。让它变得简单明了。使用机制(a)。

票数 0
EN

Stack Overflow用户

发布于 2009-09-08 01:23:39

(b)有没有可行的变种?

INSERT一次只能插入一行。如果您想插入多个行,则必须多次调用它。所以简而言之,no.

或者是否有像(c)这样的方法,需要更少的输入?

可能有一种执行联合的方法,但您应该意识到,执行所有这些联合将需要大量内存,并且比多次调用INSERT要慢得多。

如果您的数据是硬编码的,并且您希望进行大容量导入,那么您可能需要查看BULK INSERT。您可以使用BULK INSERT读取CSV data

票数 0
EN

Stack Overflow用户

发布于 2009-09-08 01:24:54

那么,您可以插入到一个临时表中,然后执行以下操作:

代码语言:javascript
复制
INSERT INTO ...
SELECT FROM ...
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1391519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档