小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

視圖的架構(gòu)刷新和綁定

 hongshatang 2011-03-22
在數(shù)據(jù)庫(kù)設(shè)計(jì)過程中,我們經(jīng)常會(huì)有這樣的情況下

  1. 某個(gè)基礎(chǔ)表會(huì)被多個(gè)視圖或者存儲(chǔ)過程引用

  2. 修改基礎(chǔ)表的時(shí)候,我們必須小心翼翼地,因?yàn)椴粫?huì)有任何提示告訴我們,如果繼續(xù)修改,會(huì)不會(huì)造成視圖或者存儲(chǔ)過程有問題

  3. 即便我們知道有問題,我們也沒有辦法去讓視圖和存儲(chǔ)過程刷新得到表最新的信息

  要解決這個(gè)問題,我這篇文章來詳細(xì)講解一下有關(guān)的技術(shù)

  --第一步:切換當(dāng)前數(shù)據(jù)庫(kù)上下文為

USE MASTER
GO

  --第二步:創(chuàng)建一個(gè)范例數(shù)據(jù)庫(kù)

CREATE DATABASE demo
GO

  --第三步:切換當(dāng)前數(shù)據(jù)庫(kù)上下文為

USE demo
GO

  --第四步:創(chuàng)建一個(gè)范例表格,包含了三個(gè)字段

CREATE TABLE TestTable(ID INT,Name VARCHAR(50),Address VARCHAR(50))
GO

  --第五步:創(chuàng)建一個(gè)視圖

CREATE VIEW TestView
AS
SELECT ID,Name,Address FROM TestTable

  --第六步:查看表和視圖的架構(gòu)信息

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TestView'
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TestTable'

  --此時(shí)會(huì)發(fā)現(xiàn)視圖三個(gè)字段與表的三個(gè)字段是一致的

視圖的架構(gòu)刷新和綁定

  圖片看不清楚?請(qǐng)點(diǎn)擊這里查看原圖(大圖)。

  --第七步:假設(shè)我們需要對(duì)表的字段進(jìn)行修改,例如修改Address字段的長(zhǎng)度為256

ALTER TABLE TestTable ALTER COLUMN Address VARCHAR(256)

  --第八步:我們?cè)賮聿榭幢砗鸵晥D的架構(gòu)信息

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TestView'
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TestTable'

  --此時(shí)會(huì)發(fā)現(xiàn),表中的Address已經(jīng)修改為了256長(zhǎng)度,而視圖仍然是50.

  --這種情況將導(dǎo)致針對(duì)視圖的查詢出現(xiàn)一些意外情況

  --那么,怎么樣讓視圖的架構(gòu)信息得到刷新呢?

視圖的架構(gòu)刷新和綁定

  圖片看不清楚?請(qǐng)點(diǎn)擊這里查看原圖(大圖)。

  --第九步:通過系統(tǒng)存儲(chǔ)過程刷新視圖

EXEC SP_REFRESHVIEW 'TestView'

  --第十步:我們?cè)賮聿榭幢砗鸵晥D的架構(gòu)信息

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TestView'
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TestTable'

  --此時(shí)會(huì)發(fā)現(xiàn),視圖和表的架構(gòu)信息是一致的

視圖的架構(gòu)刷新和綁定

  圖片看不清楚?請(qǐng)點(diǎn)擊這里查看原圖(大圖)。

  --第十一步:假設(shè)我們?yōu)榱吮苊庖晥D因?yàn)闆]有刷新而出現(xiàn)問題,希望限制TestTable的架構(gòu)修改。該怎么辦呢

  --我們可以通過綁定架構(gòu)的選項(xiàng),將視圖綁定到表的架構(gòu)

ALTER VIEW TestView
WITH SCHEMABINDING
AS
SELECT ID,Name,Address FROM dbo.TestTable --這里的表名字必須寫兩個(gè)部分,就是包含了架構(gòu)名(dbo)

  --第十二步:此時(shí)如果再次嘗試修改TestTable就會(huì)得到錯(cuò)誤提示.因?yàn)樗呀?jīng)被一個(gè)視圖綁定了

ALTER TABLE TestTable ALTER COLUMN Address VARCHAR(2000)

視圖的架構(gòu)刷新和綁定

  圖片看不清楚?請(qǐng)點(diǎn)擊這里查看原圖(大圖)。

  題外話:

  如果想要刷新存儲(chǔ)過程或者函數(shù)等其他編程呢?請(qǐng)參考sp_refreshsqlmodule這個(gè)存儲(chǔ)過程

  如果要自動(dòng)刷新所有的視圖或者存儲(chǔ)過程呢?

  --第十三步:生成刷新所有視圖的腳本

SELECT DISTINCT 'EXEC SP_REFRESHVIEW ''' + name + '''' FROM sys.objects WHERE type='V'

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多