如果超过一天并且仅当它以某些字符开头时如何删除视图?
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
我想从超过 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