0

我想创建一个包含几条记录的表,然后为该表中的每条记录运行一组 sql 语句。我会使用表中的数据来设置 sql 语句中的值。

这应该允许我只编写一次 SQL,然后为我放入表中的任何数据运行它。

但是,我不知道该怎么做。我应该使用游标来循环表格吗?还有什么办法?

感谢您给我的任何帮助或建议。

4

3 回答 3

1

CURSOR 将有与之相关的开销,但它可能是遍历表的好方法。它们不是完全不必要的邪恶,并且有它们的位置。

由于 WilliamB2 提供的信息有限,听起来 CURSOR 集可能是解决此问题的一个很好的解决方案,可以遍历他的数据并生成多个下游 INSERT。

于 2012-06-28T04:09:37.717 回答
0

是的,您可以使用光标。您也可以使用 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 

我认为光标有一个开销。

使用第二种方法,您不会在原始表上工作

于 2012-06-28T03:50:17.577 回答
0

也许你可以使用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.

于 2012-06-28T04:05:26.510 回答