如何在SQL Server 2012中创建自定义视图

时间:2016-06-13 17:22:36

标签: sql sql-server sql-server-2012

我需要一些帮助......我在SQL Server 2012中有一个架构,此时包含32个具有相同结构的表

(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 个答案:

答案 0 :(得分: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 :(得分: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

等 最后一行没有联合所有