亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

你是否也忘了刷新視圖?

系統 1662 0
原文: 你是否也忘了刷新視圖?

起因:

? ? ? ? ?由于工作原因,我隔幾天就要執行一批開發人員提供過來的腳本,部分是新需求的開發,部分是修復bug。往往包含有幾百個。我用工具批量執行之后,系統繼續運行,后來反反復復會有這樣那樣的錯誤,其中一個,經過開發人員的檢查,是因為視圖沒刷新。
? ? ? ? ?對此我納悶了很久,視圖不就是一堆select語句嗎?怎么還要刷新?難道表改了不會跟著改?為此,我首先自己做一個實驗,發現的確不會馬上改過來,至于啥時候才更改,也不清楚,聽說從2000的時候,這個問題已經存在,看來我孤陋寡聞了。

測試:


?步驟一:首先執行下面語句


      USE tempdb

GO

--創建表

IF OBJECT_ID('testTB') IS NOT NULL 

    DROP TABLE testTB

GO

CREATE TABLE testTB ( id INT, NAME VARCHAR(10) )

--插入測試數據

INSERT INTO testTB

SELECT 1,'a'

UNION ALL 

SELECT 2,'b'

UNION ALL 

SELECT 3,'c'



IF OBJECT_ID('V_testTB') IS NOT NULL 

DROP VIEW V_testTB

GO

CREATE   VIEW V_testTB

AS

    SELECT  *

    FROM    testTB

go 



SELECT * FROM V_testTB


    

得到結果:




步驟二:更改表結構

      --添加一列

ALTER TABLE testTB ADD  age INT
    

然后再來執行一下視圖:

      SELECT * FROM V_testTB
    

得到結果:



反復執行了10次,結果還是沒變。

步驟三:使用存儲過程刷新視圖


      sp_refreshview V_testTB
    

然后再執行查詢視圖的語句:

      SELECT * FROM V_testTB
    

眼前一亮,得到結果:



可以看出,結構已經刷新,證明有效果了。

分析:


? ? ? ? 細心的人應該發現,其實視圖里面我用了*號。可以通過實驗來證明,如果不用星號,是沒問題的。而如果指定了列名,那么在新加一列的時候,管它有沒有刷新,都不會有問題,因為你壓根就不會用到這列,那么如果是刪除呢?現在來試試,建表的代碼依舊,把原有的添加列的代碼改成刪除列,另外*號依舊保留:

      --刪除一列

ALTER TABLE testTB DROP   COLUMN  id
    

再執行:

      SELECT * FROM V_testTB
    

會得到以下的錯誤:



證明刪除是會報錯的,不需要刷新,那么估計大家也猜到,就算指定列,也會報錯,現在來證實一下:



這次報錯是這個,部分代碼我就不寫了。

總結:


根據上面的實驗,可以得出:
?1、視圖里面盡可能不要出現*號。*號不僅對性能有影響,也不便于結構的更新。
? ? ? ?
?2、無論視圖所涉及的表結構有無修改,每次執行腳本后,刷新一下,總是好的。并且我遇到過這樣的情景,一個名字是存儲過程的名字,但是在使用:

      SELECT DISTINCT

        'EXEC sp_refreshview ''' + name + ''''

FROM    sys.objects AS so

        INNER JOIN sys.sql_expression_dependencies AS sed ON so.object_id = sed.referencing_id

WHERE   so.type = 'V'

        AND sed.referenced_id = OBJECT_ID('testTB') ;


    

下面語句中時竟然能查出來,證明定義的時候有問題,所以這一步也同時可以檢查一下會不會存在問題對象。順帶說一句,上面的腳本是把需要刷新的視圖拼接出來,然后一次性執行。




你是否也忘了刷新視圖?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美久久精品一级c片片 | 天天摸天天舔天天操 | 国产精品分类视频分类一区 | 国产成人精品日本亚洲麻豆 | 日本综合在线 | 久久美女性网 | 99视频精品全部国产盗摄视频 | 亚洲精品久久一区影院 | 精品精品国产自在香蕉网 | 亚洲精品色一区色二区色三区 | 国产成人精品一区二三区 | 久久美女性网 | 91青青视频| 久久国产视频网站 | 奇米第一色 | 99re热久久精品这里都是精品 | 亚洲国产欧美日韩一区二区三区 | 四虎国产精品免费久久麻豆 | 国产精品国产自线拍手机观看 | 免费中文字幕在线观看 | 国产精品国产三级国产专区5o | 奇米视频在线 | 97视频在线观看视频在线精品 | 日韩视频免费在线播放 | 国产 欧美 日产久久 | 欧美成人免费看片一区 | 伊人久久综合热青草 | 亚洲欧美日韩在线观看二区 | 在线播放性xxx欧美 在线播放亚洲 | 国产精品青草久久 | 99热久久这里只精品 | 国产短视频精品区第一页 | 爱操在线视频 | 四虎影院在线观看网站 | 九九热观看视频 | 天天狠狠弄夜夜狠狠躁·太爽了 | 天天摸夜夜摸爽爽狠狠婷婷97 | 久热福利视频 | 日本操比 | 国产99在线a视频 | 午夜男人|