替换所有视图中某些字段

 

 1 DECLARE @TotalCount INT = 0,
 2 @NowCount INT = 0,
 3 @v_Name NVARCHAR(300) = N'',
 4 @v_Des NVARCHAR(max) = N'';
 5 --创建临时表
 6 CREATE TABLE #Refresh_View 
 7 ( ID INT IDENTITY(1, 1),
 8 v_Name NVARCHAR(300),
 9 v_Des NVARCHAR(max),
10 PRIMARY KEY (ID));
11 INSERT INTO #Refresh_View
12 
13 SELECT 
14 OBJECT_NAME(sm.object_id) AS v_Name ,
15 sm.definition AS v_Des
16 FROM sys.sql_modules AS sm
17 JOIN sys.objects AS o ON sm.object_id = o.object_id
18 WHERE o.type='V'
19 
20 SELECT @TotalCount = COUNT(*) FROM #Refresh_View;
21 SET @NowCount = 1;
22 --循环所有视图并替换视图中某些字段
23 WHILE (@NowCount <= @TotalCount)
24 BEGIN
25 BEGIN TRY
26 SELECT @v_Name = v_Name,
27 @v_Des = v_Des
28 FROM #Refresh_View
29 WHERE ID = @NowCount;
30 --EXEC sp_refreshview @v_Name;
31 UPDATE #Refresh_View SET v_Des = replace (v_Des,'被修改字段','修改为的字段') where id=@NowCount
32 SELECT @v_Name = v_Name,
33 @v_Des = v_Des
34 FROM #Refresh_View
35 WHERE ID = @NowCount;
36 PRINT '视图' + @v_Name + '替换成功';
37 exec('drop view '+@v_Name)
38 exec(@v_Des)
39 END TRY
40 BEGIN CATCH
41 PRINT '视图' + @v_Name + '替换失败';
42 select @v_Name as [view], ERROR_MESSAGE() as msg
43 END CATCH;
44 SET @NowCount=@NowCount+1;
45 END;
46 
47 --删除临时表
48 IF EXISTS (SELECT * FROM tempdb.dbo.sysobjects WHERE id = OBJECT_ID(N'tempdb..#Refresh_View')AND type = 'U')
49 BEGIN
50 DROP TABLE #Refresh_View;
51 END;

 

posted @ 2020-09-24 22:52  Ambition丿z  阅读(104)  评论(0)    收藏  举报