gpt4 book ai didi

sql-server - 如何为数据库中的每个 View 创建一个调用 sp_refreshview 的存储过程?

转载 作者:行者123 更新时间:2023-12-03 12:10:45 25 4
gpt4 key购买 nike

今天我运行这个

select 'exec sp_refreshview N''['+table_schema+'].['+table_name+']'''
from information_schema.tables
where table_type = 'view'

这会生成很多:exec sp_refreshview N'[SCHEMA].[TABLE]'。然后我将结果复制到查询编辑器窗口并运行所有这些执行程序。

我如何一次完成这一切?
我想要一个名为 dev.RefreshAllViews 之类的存储过程,我可以执行它来执行此操作...

最佳答案

DECLARE @RefreshScript varchar(max)
set @RefreshScript = ''


select @RefreshScript= @RefreshScript + 'exec sp_refreshview N''['+table_schema+'].['+table_name+']''
'
from information_schema.tables
where table_type = 'view'



exec (@RefreshScript)

如果您的 View 名称中有 [] 字符有任何危险,您可能需要查看 QUOTENAME 函数。

或者也用光标
DECLARE @viewName AS VARCHAR(255)

DECLARE listOfViews CURSOR
FOR SELECT '[' + SCHEMA_NAME(uid) + '].[' + name + ']'
FROM sysobjects
WHERE xtype = 'V'


OPEN listOfViews

FETCH NEXT FROM listOfViews INTO @viewName

WHILE ( @@FETCH_STATUS <> -1 )
BEGIN


FETCH NEXT FROM listOfViews INTO @viewName

BEGIN TRY
EXEC sp_refreshview @viewName
PRINT @viewName + ' refreshed OK'
END TRY
BEGIN CATCH
PRINT @viewName + ' refresh failed'
END CATCH
END

CLOSE listOfViews

DEALLOCATE listOfViews

关于sql-server - 如何为数据库中的每个 View 创建一个调用 sp_refreshview 的存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2491298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com