日期:2014-05-18  浏览次数:20387 次

更新数据表结构(如增加新字段),和他相关的视图出现错列现象
请问该如何解决?
如A表(字段   i,a,b,c),B表(字段i,g,h),视图V(select   A.*,B.g   from   A   inner   join   B   on   A.i=B.i)
假设A中有一条记录为   (20, 'hello ', 'world ', '1 ')
B中有一条为   (20, 'OK ',100)
如果是select   *   from   V   出来的数据结果应该是
i,a,b,c,g
20, 'hello ', 'world ', '1 ', 'ok '
现增加字段d(允许为空)于c后,成新表A(字段a,b,c,d)
然而在程序中使用V视图的时候,出现列位置移位错乱现象。
即,select   *   from   V   出来的数据结果   为  
i,a,b,c,d,g
20, 'hello ', 'world ', '1 ', 'ok ',null
谢谢指教

------解决方案--------------------
sp_refreshview '视图名 ' 会让指定的视图在下次运行时重新编译


基础表修改后, 视图结构自动更新的最简单的方式就是让相关的视图重新编译.
------解决方案--------------------
這是別人寫的一段代碼,你可以這這段代碼處理你的視圖。

CREATE TABLE #(name sysname, type sysname)
INSERT # EXEC sp_depends 'tb ' -- 这里是你修改了结构的表名
IF @@ROWCOUNT = 0
RETURN
DECLARE tb CURSOR LOCAL
FOR
SELECT 'sp_refreshview ' + QUOTENAME(name, ' ' ' ')
FROM #
WHERE type = 'view '
DECLARE @s nvarchar(1000)
OPEN tb
FETCH tb INTO @s
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC(@s)
FETCH tb INTO @s
END
CLOSE tb
DEALLOCATE tb
DROP TABLE #