Sql server T-SQL:使用select语句中的列创建视图的脚本
我要为整个数据库创建一些批量视图 要创建视图,一般语法如下所示:Sql server T-SQL:使用select语句中的列创建视图的脚本,sql-server,tsql,view,Sql Server,Tsql,View,我要为整个数据库创建一些批量视图 要创建视图,一般语法如下所示: CREATE VIEW [TABLE_NAME] AS SELECT [COLUMN1], [COLUMN2], [COLUMN3], [COLUMN4] FROM [TABLE_NAME] WITH CHECK OPTION; 我想通过查询信息模式中的列名([COLULMN1],[COLUMN2],等等)来设置上面脚本中的列名 有没有办法通过表名来实现这一点 你的朋友是好程序员吗。您要做的是获取列的
CREATE VIEW [TABLE_NAME]
AS
SELECT [COLUMN1], [COLUMN2], [COLUMN3], [COLUMN4]
FROM [TABLE_NAME]
WITH CHECK OPTION;
我想通过查询信息模式中的列名([COLULMN1]
,[COLUMN2]
,等等)来设置上面脚本中的列名
有没有办法通过表名来实现这一点 你的朋友是好程序员吗。您要做的是获取列的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);
你的朋友是好程序员吗。您要做的是获取列的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);
这里有一个选择。。。将“MyTableName”替换为所需的表名,或将其包装在一个游标中,该游标将表名从信息\u SCHEMA.VIEWS读取到@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);
这里有一个选择。。。将“MyTableName”替换为所需的表名,或将其包装在一个游标中,该游标将表名从信息\u SCHEMA.VIEWS读取到@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);
是的,你需要动态的SQLyes,你需要动态的SQLyes,这是一个奇妙而聪明的想法!非常感谢你的建议。我会尝试一下,让你知道它是如何工作的!尝试过这个,但似乎不起作用。以下内容已成功执行,但我没有看到在任何地方创建视图<代码>声明@fieldnames VARCHAR(MAX)选择@fieldnames=coalesce(@fieldnames+,“,”)+V_FIELDNAME from tmp_fieldnames--选择@fieldnames选择“创建视图”+“DS_STAGE_QAS.dbo.DYN_MARC_P2004”+“作为”+“选择”+@fieldnames+”从“+”STAGE_MARC”+“其中STAGE_MARC.PLANT=2040”+“带复选选项;”代码>忽略-它将起作用。。我只是有一些清理工作要做。非常感谢您的帮助。好主意!非常感谢你的建议。我会尝试一下,让你知道它是如何工作的!尝试过这个,但似乎不起作用。以下内容已成功执行,但我没有看到在任何地方创建视图<代码>声明@fieldnames VARCHAR(MAX)选择@fieldnames=coalesce(@fieldnames+,“,”)+V_FIELDNAME from tmp_fieldnames--选择@fieldnames选择“创建视图”+“DS_STAGE_QAS.dbo.DYN_MARC_P2004”+“作为”+“选择”+@fieldnames+”从“+”STAGE_MARC”+“其中STAGE_MARC.PLANT=2040”+“带复选选项;”代码>忽略-它将起作用。。我只是有一些清理工作要做。非常感谢你的帮助。