2014-10-27 41 views
0

問題:我有一個表,我們可以使用屬性(TableName,ColumnName)等來調用它的AllColumns。使用另一個表中的數據生成sql select語句

現在,我想實現的是爲此表的每個記錄生成一個select語句。

僞代碼:

for (table, column) in (select TableName, ColumnName from AllColumns) do 
    select 'table', column from table where column like '%blah%' 
end for 

你能幫忙嗎?

+0

您需要動態SQL來執行此操作。你熟悉'sp_executesql'還是'exec()'。如果沒有,您可以通過google'ing「sql server dynamic sql」開始。 – 2014-10-27 14:32:04

+0

或者,如果您只是試圖生成一些東西來保存自己的輸入內容(而不是試圖製作一個自動的,可重新運行的腳本來爲您完成工作),則可以使用'PRINT'命令將值輸出到消息窗格,然後複製/粘貼到一個新的窗口並從那裏運行。 – AHiggins 2014-10-27 14:44:01

+0

是不是有像Postgres的'INFORMATION_SCHEMA.tables'? – 2014-10-27 14:47:59

回答

0

您可以使用WHILE循環和臨時表。因此,您將所有記錄提取到臨時表中,然後循環查看記錄以執行選擇或您希望執行的任何過程,如下所示;

DECLARE @TempTable TABLE 
(
    ID INT IDENTITY(1,1), 
    Table Varchar(100), 
    Column Varchar(100) 
) 

INSERT INTO @TempTable 
    SELECT Table, Column FROM AllColumns 


DECLARE @LOOP INT 
DECLARE @COUNT INT 

SET @LOOP = 0 
SET @COUN = 1 

SELECT @LOOP = COUNT(1) FROM @TempTable 

WHILE @COUNT <= @LOOP 
    BEGIN 

    select 'table', column from @TempTable 
    where column like '%blah%' 
    and ID = @COUNT 

SET @COUNT = @COUNT + 1 
END 
0

可以使用動態SQL做到這一點:

DECLARE @SQL NVARCHAR(MAX); 

SET @SQL = (SELECT 'SELECT [Table] = ''' + TableName + ''', ' + 
        '  [Column] = ''' + ColumnName + ''' ' + 
        'FROM ' + TableName + ' ' + 
        'WHERE ' + ColumnName + ' LIKE ''%blah%'';' 
      FROM AllColumns 
      FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'); 

EXECUTE sp_executesql @SQL; 

然而,僅僅因爲你可以做一些事情,並不意味着你應該 - 你說AllColumns有成千上萬的條目,您因此運行數以千計的短的查詢,其中每個生成它自己的結果集。我不能想到這是可取的許多情況。

相關問題