使用while循环在表中插入多条记录[关闭]
Posted
技术标签:
【中文标题】使用while循环在表中插入多条记录[关闭]【英文标题】:Inserting a multiple records in a table with while loop [closed] 【发布时间】:2012-08-28 16:17:10 【问题描述】:我想将几百行插入一个指向另一个表中的 pk 的表中。我一直在尝试使用 while 循环在表中插入多条记录。我实际上是在设置我的测试数据。
这就是我正在做的:
declare @count int;
set @count = 4018;
while @count <= 5040
begin
INSERT INTO [MY_TABLE]
([pk_from_other_table]
,[..]
,[...]
,[..]
,[..]
,[...]
,[...]
,[..])
select
(pk_from_other_table,
,[..]
,[...]
,[..]
,[..]
,[...]
,[...]
,[..])
@count = @count + 1;
end
但这似乎不起作用!谁能帮忙...我要做的就是插入记录数=主表中存在的记录数。
?关于如何实现这一目标的任何想法?
我在 count 附近得到不正确的语法
或
消息 102,级别 15,状态 1,第 17 行 ',' 附近的语法不正确。
【问题讨论】:
请更新您的问题,我们看不到您的尝试。 现在添加......添加了一些不正确的东西..更正它 错误信息是什么? 您遗漏了很多内容,包括MY_TABLE
的架构。是否有错误消息,例如表示您无法为标识列指定值?
Line 17
是否意味着您发布的删节代码?
【参考方案1】:
您当前的语法问题是 @count = @count + 1;
必须是 set @count = @count + 1
。
但是……
不需要循环。你可以直接做一个大的插入,比如:
insert into your_table (fk_col, other_col1, other_col2)
select pk_col, 'something', 'something else'
from your_other_table
如果需要,可以在上面添加where
子句。
【讨论】:
是的,但我想循环浏览..这些记录很多 您在基于集合的环境中工作——尽可能避免循环。 @user1630846 - 几百行,到目前为止,记录并不多。 @user1630846 循环很慢,在使用关系数据库时应尽可能避免。 @user1630846 见:RBAR【参考方案2】:关于Msg 102, Level 15, State 1, Line 17 ',' 附近的语法错误。:
您在第二个选择列表中有双逗号:
select
(pk_from_other_table,
,[..]
删除一个。
关于插入: 如果您想将源表中的所有记录多次插入到目标表中,您可以循环执行:
declare @count int;
set @count = 4018;
while @count <= 5040
begin
INSERT INTO DestinationTableName
(DestinationTableColumn1Name
,DestinationTableColumn2Name --ect
)
select
SourceTableColumn1Name
,SourceTableColumn2Name --ect
from SourceTableName
set @count = @count + 1;
end
但是当你想从源表中插入多行到目标时,where
就足够了:
INSERT INTO DestinationTableName
(DestinationTableColumn1Name
,DestinationTableColumn2Name --ect
)
select
SourceTableColumn1Name
,SourceTableColumn2Name --ect
from SourceTableName
where SourceTablePK between 4018 and 5040 --LowerBound and UpperBound
--or SourceTablePK in (1, 2, 3) etc
您不必逐行进行。
【讨论】:
以上是关于使用while循环在表中插入多条记录[关闭]的主要内容,如果未能解决你的问题,请参考以下文章