我想从系统表创建一个视图,我可以输出我想要运行的语法,但如何运行该输出命令? 我创建了以下查询,它输出创建表的语法
SELECT
'CREATE VIEW [Uti_John].[Vw_' + x.table_name +']' +
' AS SELECT * FROM [' + x.schema_name + '].[' + x.table_name +']'
FROM
(
SELECT SCHEMA_NAME(schema_id) AS schema_name
,name AS table_name
FROM sys.tables
WHERE name like 'T%'
and SCHEMA_NAME(schema_id) = 'dbo'
) x
CREATE VIEW [Uti_John].[Vw_TNAME] AS SELECT * FROM [dbo].[TNAME]
CREATE VIEW [Uti_John].[Vw_TClient] AS SELECT * FROM [dbo].[TClient]
CREATE VIEW [Uti_John].[Vw_TClaim] AS SELECT * FROM [dbo].[TTClaim]
CREATE VIEW [Uti_John].[Vw_TInsurance] AS SELECT * FROM [dbo].[TTInsurance]
CREATE VIEW [Uti_John].[Vw_Ttest] AS SELECT * FROM [dbo].[Ttest]
手动一一复制此输出会创建视图,但我如何在循环中运行此输出并自动创建?
您可以使用
sys.views
视图来检查视图是否已存在。
DECLARE @SQL NVARCHAR(max)='*';
WHILE @SQL IS NOT NULL
BEGIN
SET @SQL = NULL;
SELECT @SQL =
'CREATE VIEW [Uti_John].[Vw_' + x.table_name +']' +
' AS SELECT * FROM [' + x.schema_name + '].[' + x.table_name +']'
FROM
(
SELECT SCHEMA_NAME(schema_id) AS schema_name
,t.name AS table_name
FROM sys.tables t
WHERE t.name like 't%'
and SCHEMA_NAME(t.schema_id) = 'dbo'
AND NOT EXISTS ( SELECT *
FROM sys.views v
WHERE v.name = 'Vw_' + t.name
AND OBJECT_SCHEMA_NAME(v.object_id) = 'Uti_John'
)
) x
EXEC sp_executesql @SQL;
PRINT @SQL;
END ;
如果表中有外键怎么办?