我想创建一个包含几条记录的表,然后为该表中的每条记录运行一组 sql 语句。我会使用表中的数据来设置 sql 语句中的值。
这应该允许我只编写一次 SQL,然后为我放入表中的任何数据运行它。
但是,我不知道该怎么做。我应该使用游标来循环表格吗?还有什么办法?
感谢您给我的任何帮助或建议。
我想创建一个包含几条记录的表,然后为该表中的每条记录运行一组 sql 语句。我会使用表中的数据来设置 sql 语句中的值。
这应该允许我只编写一次 SQL,然后为我放入表中的任何数据运行它。
但是,我不知道该怎么做。我应该使用游标来循环表格吗?还有什么办法?
感谢您给我的任何帮助或建议。
CURSOR 将有与之相关的开销,但它可能是遍历表的好方法。它们不是完全不必要的邪恶,并且有它们的位置。
由于 WilliamB2 提供的信息有限,听起来 CURSOR 集可能是解决此问题的一个很好的解决方案,可以遍历他的数据并生成多个下游 INSERT。
是的,您可以使用光标。您也可以使用 while 循环
declare @table as table(col1 int, col2 varchar(20))
declare @col1 int
declare @col2 varchar(50)
declare @sql varchar(max)
insert into @table
SELECT col1, col2 FROM OriginalTable
while(exists(select top 1 'x' from @table)) --as long as @table contains records continue
begin
select top 1 @col1=col1, @col2=col2 from @table
SET @sql = 'INSERT INTO Table t VALUES('+cast(@col1 as varchar)+')'
delete top (1) from @table --remove the previously processed row. also ensures no infinite loop
end
我认为光标有一个开销。
使用第二种方法,您不会在原始表上工作
也许你可以使用INSERT...SELECT
而不是循环:
INSERT INTO target_table
SELECT
some_col,
some_other_col,
'Some fixed value',
NULL,
42,
you_get_the_idea
FROM source_table
WHERE source_table.you_get_the_idea = 1
你的列SELECT
应该与目标表的结构相匹配(你可以省略一个 int/identity pk,id
如果你有一个)。
如果最好的选择是这个或循环取决于你想在循环中填充多少表。如果只是几个,我通常会坚持使用INSERT...SELECT
.