我有一些批量视图可以为整个数据库创建。
要创建视图,一般语法如下:
CREATE VIEW [TABLE_NAME]
AS
SELECT [COLUMN1], [COLUMN2], [COLUMN3], [COLUMN4]
FROM [TABLE_NAME]
WITH CHECK OPTION;
我想通过查询[COLULMN1]
中的列名([COLUMN2]
,INFORMATION_SCHEMA.COLUMNS
等)来设置上面脚本中的列名。
有没有办法通过表名来实现这个目的?
答案 0 :(得分:1)
COALESCE是你的好朋友。你想要做的是获得一个COLSNS的csv列表。然后使用动态sql,您可以自动生成其余的代码。
declare @columns AS VARCHAR(MAX)
SELECT @COLUMNS = NULL
select @COLUMNS = coalesce(@columns+',','')+c.name from syscolumns as c
inner join sysobjects as o on c.id = o.id
WHERE O.NAME = 'change me to your table name'
SELECT @COLUMNS
SELECT ' CREATE VIEW ' + 'COOL VIEW NAME' + ' AS ' +
' SELECT ' + @COLUMNS +
' FROM '+ ' change me to your table name '+
' WITH CHECK OPTION;'
<强> 修改 强>
我故意没有在任何地方声明视图。如果要声明视图,只需像这样执行脚本。 但是你不应该只是在你的服务器上执行代码而不是全部阅读 我故意排除执行部分,因为我认为剪切和粘贴代码并执行它是错误的判断没有理解/测试。
DECLARE @sql varchar(max)
SELECT @sql = ' CREATE VIEW ' + 'COOL VIEW NAME' + ' AS ' +
' SELECT ' + @COLUMNS +
' FROM '+ ' change me to your table name '+
' WITH CHECK OPTION;'
EXEC(@sql);
答案 1 :(得分:0)
这里有一个选项...替换&#34; MyTableName&#34;使用您想要的表名,或将其包装在从TABLE_SCHEMA.VIEWS读取TABLE_NAME到@tableName的游标中:
DECLARE @tableName sysname;
DECLARE @sql nvarchar(max);
DECLARE @columnList nvarchar(max);
SELECT @tableName = 'MyTableName';
SELECT @columnList = '';
SELECT @columnList += CASE WHEN LEN(@columnList) = 0 THEN '' ELSE ', ' END + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tableName ORDER BY ORDINAL_POSITION;
SELECT @sql = 'CREATE VIEW [TABLE_NAME] AS
SELECT ' + @columnList + '
FROM [' + @tableName + ']
WITH CHECK OPTION;'
PRINT @sql
EXEC(@sql);