我想創建一個表,在這幾個記錄,然後運行一組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