All*_*est 2 sql-server stored-procedures cursor
今天我跑了
select 'exec sp_refreshview N''['+table_schema+'].['+table_name+']'''
from information_schema.tables
where table_type = 'view'
Run Code Online (Sandbox Code Playgroud)
这会产生很多:exec sp_refreshview N'[SCHEMA].[TABLE]'.然后我将结果复制到查询编辑器窗口并运行所有这些exec.
我如何一次完成这一切?我想有一个名为dev.RefreshAllViews的存储过程,我可以执行它来执行此操作...
Mar*_*ith 10
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)
Run Code Online (Sandbox Code Playgroud)
如果您的视图中有[]字符存在任何危险,您可能需要查看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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2080 次 |
| 最近记录: |