试图执行一个DROP VIEW语句,该语句是在调度上执行SELECT语句的结果



所以我需要定期删除那些在我们的应用程序中出现错误的作业孤立的视图,为了识别它们,我运行以下查询,该查询生成了许多drop VIEW语句,其中包含上述需要删除的视图。

SELECT 'DROP VIEW ' + TABLE_NAME 
FROM INFORMATION_SCHEMA.VIEWS 
WHERE TABLE_NAME LIKE 'SEF_%'
SELECT 'DROP VIEW ' + TABLE_NAME 
FROM INFORMATION_SCHEMA.VIEWS 
WHERE TABLE_NAME LIKE 'SCF_%'

我的问题是我需要在计划任务上运行那些DROP VIEW语句,所以运行SELECT语句不是问题(因为我可以调度),但我还需要在计划上运行由此产生的查询。如有任何帮助,我将不胜感激。

下面的评论,我忘了说这是SQL Server 2008 R2企业版。

您需要将查询结果存储在变量中并执行。

SqlFiddle

DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql = @sql + 'DROP VIEW ' + TABLE_NAME + ';' + CHAR(10) + CHAR(13)
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME LIKE 'SEF_%'
   OR TABLE_NAME LIKE 'SCF_%';
/* Debug */
SELECT @sql;
EXEC [dbo].[sp_executesql]
    @sql;

以后你应该创建视图WITH SCHEMABINDING,并强制先删除视图再删除表。

最新更新