如果超过一天并且仅当它以某些字符开头时如何删除视图?

How to drop view if older than a day and only if it begins with certain characters?

我想从超过 1 天前创建且以 'EXAMPLE_VIEW%' 开头的服务器中删除所有视图。我该怎么做?

一种方法是根据您所需的条件从 sys.views 目录视图生成脚本。下面的示例使用 XML PATH 进行字符串连接,因为您使用的是 SQL Server 2016。可以在 SQL Server 2017 及更高版本中使用 STRING_AGG。此示例还包括对 dbo 架构的检查,您可以根据需要对其进行调整。

DECLARE @DropScript nvarchar(MAX) =
    STUFF(
        (SELECT
            N';DROP VIEW ' + QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + N'.' + QUOTENAME(name)
        FROM sys.views
        WHERE
            name LIKE N'WQB_VIEW%'
            AND OBJECT_SCHEMA_NAME(object_id) = N'dbo'
            AND create_date < DATEADD(day, -1, GETDATE())
        FOR XML PATH(''),TYPE).value('.','nvarchar(MAX)')
    ,1,1,'');
EXECUTE sp_executesql @DropScript;
DECLARE @count INT
DECLARE @name VARCHAR(100)
DECLARE @view TABLE(id INT identity(1,1), viewname VARCHAR(100))

INSERT INTO @view (viewname)
SELECT name FROM sys.objects WHERE type='v' and cast(create_date AS DATE)< cast(dateadd(DY,-1,getdate()) AS DATE) 

SELECT @count = COUNT(*) FROM @view
WHILE @count>0
BEGIN
    SELECT @name=viewname FROM @view WHERE id = @count
    SELECT @name
    EXEC('DROP VIEW '+@name+'')
    SET @count=@count-1
END