T-SQL:使用select语句中的列创建视图的脚本

时间:2016-09-12 18:38:51

标签: sql-server tsql view

我有一些批量视图可以为整个数据库创建。

要创建视图,一般语法如下:

CREATE VIEW [TABLE_NAME] 
AS 
    SELECT [COLUMN1], [COLUMN2], [COLUMN3], [COLUMN4]
    FROM [TABLE_NAME]
    WITH CHECK OPTION;

我想通过查询[COLULMN1]中的列名([COLUMN2]INFORMATION_SCHEMA.COLUMNS等)来设置上面脚本中的列名。

有没有办法通过表名来实现这个目的?

2 个答案:

答案 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);