2016-06-13 73 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