更新数据表结构(如增加新字段),和他相关的视图出现错列现象
请问该如何解决?
如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 #