2016-06-13 72 views
2

我需要一些幫助的自定義視圖......我在SQL Server 2012中的模式,在這個時刻包含32臺具有所有的相同的結構如何創建SQL Server 2012中

(KEY, DATE, USER, STATE, NOTES) 

我需要的是建立一個view結構如下

KEY, NAME, STATE 

注意,KEYSTATE列的所有表相同,NAME字段對應表名稱...

我想這樣

SELECT KEY, TABLE.NAME, STATE 
FROM MYTABLELIST 
WHERE STATE = 'SOME CONDITION' 

我可以得到我需要這個

SELECT t.name 
FROM sys.tables t 
INNER JOIN sys.schemas s ON t.[schema_id] = s.[schema_id] 
WHERE s.name = N'RULES' 
    AND t.name LIKE 'G_%'; 

表的名字,但我不知道如何遍歷該列表創建視圖。

+2

您不能運行視圖中的動態代碼。如何使用程序? –

回答

2

只有存儲過程將做到這一點:

CREATE PROCEDURE test_List AS 
BEGIN 
    DECLARE @SCRIPT VARCHAR(8000) = (
    SELECT 'SELECT [KEY], ''' + t.name + ''' as [NAME], [STATE] FROM [' 
      + t.name + '] UNION ALL ' 
    FROM sys.tables t 
    INNER JOIN sys.schemas s 
      ON t.[schema_id] = s.[schema_id] 
    WHERE s.name = N'RULES' AND t.name LIKE 'G_%' 
    FOR XML PATH ('')); 

    SET @SCRIPT = LEFT(@SCRIPT,LEN(@SCRIPT)-10); 

    EXEC(@SCRIPT) 
    RETURN 
END; 
GO 
1

有兩種方法可以完成這項艱難的工作,但需要一段時間才能編寫和調試,但只能運行一次。

和手動選項:

剪切的粘貼此代碼一次爲每個表和手工編輯非常快。

注意跳過create view as tablelistview,直到選擇工作。

SELECT KEY, 'table1' as tablename, STATE FROM TABLE1 
Union all 
SELECT KEY, 'table2', STATE FROM TABLE2 
Union all 
SELECT KEY, 'table3' , STATE FROM TABLE3 
Union all 

等 最後一行將不會有工會所有

+0

@Juan聖地亞哥Arango Giraldo,你是如何得到你的自定義視圖? – Mike