我需要一些帮助......我在SQL Server 2012中有一个架构,此时包含32个具有相同结构的表
(KEY, DATE, USER, STATE, NOTES)
我需要创建一个具有以下结构的view
KEY, NAME, STATE
请注意,KEY
和STATE
列对于所有表都相同,字段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_%';
但我不知道如何迭代该列表来创建视图。
答案 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
等 最后一行没有联合所有