我想创建一个表,在这几个记录,然后运行一组SQL语句在该表中的每个记录。我会使用表中的数据来设置sql语句中的值。执行SQL语句,而循环表
这应该让我写的SQL只有一次,然后运行它,我把任何表中的数据。
但是,我不知道如何去做这件事。我应该使用游标来循环表格吗?其他方式?
感谢您的任何帮助或建议,可以给我。
我想创建一个表,在这几个记录,然后运行一组SQL语句在该表中的每个记录。我会使用表中的数据来设置sql语句中的值。执行SQL语句,而循环表
这应该让我写的SQL只有一次,然后运行它,我把任何表中的数据。
但是,我不知道如何去做这件事。我应该使用游标来循环表格吗?其他方式?
感谢您的任何帮助或建议,可以给我。
CURSOR将具有与其相关的开销,但可以通过你的表走的好方法。他们不是一个完全不必要的邪恶,并有自己的位置。
随着WilliamB2提供的信息有限,这听起来像一个光标设定可能是这个问题,通过他的数据走并产生多个下游插入一个很好的解决方案。
是的,你可以使用游标。你也可以使用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
。
我实际上并没有将我的源表中的数据插入到我的目标表中。我使用源表中的字段在我的INSERT语句中设置参数来填充其他表。例如,如果我的源表是关于不同类型的水果的所有信息,并且我正在使用它来将一堆有关水果的统计信息插入到另一个表中。 – WilliamB2
是的,'CURSOR'可以工作。但是,这是否是最好的解决方案取决于你在循环内究竟做些什么(你可能不需要它)。 – bfavaretto
什么数据库?这听起来更像是存储过程的工作。 – Tawnos
@bfavaretto我将放入几个INSERT语句来填充一系列表。 – WilliamB2