2013-08-26 127 views
1

我有下面的代碼,它適用於一個表,但我想弄清楚如何使其循環。如何循環表創建

DECLARE @sql NVARCHAR(2000) 
DECLARE @table VARCHAR(100) 
DECLARE @command NVARCHAR(1000) 

SELECT @table = (VV.SRC_CD) 
FROM VV 

SET @sql = 'SELECT [CD],[SRC_CD],[SRC_CD_DESC],[DSC],[REFRESH_DT],[GEN_DSC] = CAST(null as VARCHAR(50))  INTO dbo.vv_' + @table 
      + 
' FROM [vv] A WHERE A.SRC_CD <> ''GEN''  AND A.DSC <> ''NO DATA'' AND A.DSC <> ''(BLANK) NO'' AND A.src_cd = ''' 
      + @table + '''' 

EXEC Sp_executesql 
    @stmt = @sql 

填充@table變量的代碼返回一行。我試圖做的是讓這個過程循環一次,爲表中的每一個不同的值。獨特的子句在這裏不起作用,我嘗試了一個沒有運氣的基本表數組。

我是否需要修改它以使用遊標?

+0

@table變量的可能值是多少?沒有看到一些示例數據,不確定你的問題。 – ganders

+0

如果我運行下面的查詢:從VV 選擇不同(vv.SRC_CD)有幾個可能的值是: AC ACI AG AID AL AP AR AS AT AVS BA BD – Baub

+0

你想爲每個返回值運行這個@sql文本嗎?如果是這樣,你可以做一個CURSOR ... – ganders

回答

0

這聽起來像你需要一個光標,類似是:

DECLARE @Iterator NVARCHAR(100) 
     ,@sql NVARCHAR(MAX) 
DECLARE xyz CURSOR 
FOR 
--Select stuff to iterate over 
SELECT DISTINCT SRC_CD 
FROM w 

OPEN xyz 
FETCH NEXT FROM xyz 
INTO @Iterator 

WHILE @@FETCH_STATUS = 0 
BEGIN 

--Do stuff 
SET @sql = 'SELECT [CD],[SRC_CD],[SRC_CD_DESC],[DSC],[REFRESH_DT],[GEN_DSC] = CAST(null as VARCHAR(50)) 
      INTO dbo.vv_' + @Iterator +' 
      FROM [vv] A 
      WHERE A.SRC_CD <> ''GEN'' 
       AND A.DSC <> ''NO DATA'' 
       AND A.DSC <> ''(BLANK) NO'' 
       AND A.src_cd = ''' + @Iterator + '''' 
PRINT (@sql)  

    FETCH NEXT FROM xyz 
    INTO @Iterator 
END 

CLOSE xyz 
DEALLOCATE xyz 
GO 

我在那裏留下PRINT這樣可以保證輸出是在執行前根據需要。