當前位置:首頁 » 編程軟體 » 視圖的腳本

視圖的腳本

發布時間: 2023-05-02 16:54:05

sql視圖保存後,查詢時總是顯示符號非法

首先,創建兩個視圖,視圖的腳本如下:

--視圖 vCustomersA
create view vCustomersA
as
select CustomerID ,CompanyName,ContactName,ContactTitle,
Address,City,Region,PostalCode,Country,Phone,Fax
from dbo.Customers
go

--視圖 vCustomersB
create view vCustomersB
as
select * from vCustomersA
go

然後,使用這兩個視圖查詢客戶ID為ALFKI的資料,查詢語句如下:

select * from vCustomersA where CustomerID = 'ALFKI'
select * from vCustomersB where CustomerID = 'ALFKI'

查詢的結果如下:

一切正常,這個時候,需求發生了變化,我們需要改動vCustomersA,改動後的腳本如下:(為了說明問題,我們只是把CompanyName和ContactName互換一下位置)

--改動後的視圖vCustomersA
alter view vCustomersA
as
select CustomerID ,ContactName,CompanyName,ContactTitle,
Address,City,Region,PostalCode,Country,Phone,Fax
from dbo.Customers
go

這個時候,當我們再次使用視圖vCustomersB查詢客戶ID為ALFKI的資料的時候,錯誤已經悄然來臨,你注意到了嗎?讓我們來看一下這兩個視圖的查詢結果吧,查詢語句如下:

select * from vCustomersA where CustomerID = 'ALFKI'
select * from vCustomersB where CustomerID = 'ALFKI'

查詢的結果發生變化。你注意到數據的異常了嗎?使用視圖vCustomersB查詢的結果出現了錯誤,CompanyName顯示的資料是:Maria Anders,而在視圖vCustomersA查詢的結果中CompanyName是:Alfreds Futterkiste。我們僅僅是在vCustomersA中互換了兩個欄位的位置,再次使用vCustomersB查詢數據卻發生了數據錯位的現象,這是什麼原因導致的呢?

帶著這個問題,讓我們去了解一下,何謂視圖?在Sql Server2000的幫助文檔中是這樣描述視圖的,定義如下:「視圖是一個虛擬表,其內容由查詢定義,同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。但是,視圖並不在資料庫中以存儲悉慧的數據值集形式存在。行和列數據來自由定義視圖的查詢所引用的表,並且在引用視圖時動態生成。」通過這個定義我們可以看出,視圖是一個虛擬的表,它僅僅包括視圖的定義腳本,查詢的內容則是動態的生成。當我們創建了一個視圖以後,喚陸薯視圖的腳本會保存到當前資料庫的系統表syscomments里,我們可以通過系統提供的存儲過程:sp_helptext查詢得到視圖的定義腳本。從定義上看,好像並不能得到我們想要的答案,那麼我們就先不管Sql Server2000是如何實現視圖的,我們先來解決一下當前的問題(我上面提到的)。可能有些朋友已經知道了解決問題的辦法了,那就是把vCustomersB的定義腳本重新執行一下(其實只需要把create換成alter執行一下就可以),腳本和者如下:

--重新執行一下vCustomersB的定義腳本

alter view vCustomersB
as
select * from vCustomersA
go

那麼,除了這個方法以外,其實SqlServer2000也提供了一個擴展存儲過程sp_refreshview來幫我們做這件事情,調用的腳本如下:

--刷新指定視圖的元數據

exec sp_refreshview 'vCustomersB'

我個人目前就知道這兩個辦法,不知道,你還有沒有其他的辦法,有的話可以一起分享一下。

sp_refreshview的功能描述為:「刷新指定視圖的元數據。由於視圖所依賴的基礎對象的更改,視圖的持久元數據會過期。」由於sp_refreshview的代碼被封裝了(沒有公開),所以我們看不到它的內部實現,不過看了這個存儲過程的描述,你是否對視圖有了新的認識呢?

從這里,我們可以看到,當我們使用一個視圖查詢數據的時候,其實我們是在使用視圖的元數據來查詢的,當視圖依賴的對象發生了變化以後,視圖的元數據就需要更新,這樣,使用視圖時才不會違背我們的意願。

知道了問題的產生的原因後,那麼我們在重新修改一個表或視圖的腳本時,我們就需要更新依賴於該對象的視圖,否則就會出現意想不到的錯誤。如何找到依賴於該對象的對象(包括視圖,觸發器,存儲過程)呢?SqlServer2000在該資料庫的系統表sysdepends里記錄這些依賴關系,所以你可以查詢該表獲取你想要的信息,但其實,你可以通過使用系統提供的存儲過程:sp_depends來獲取該對象的所依賴的對象(返回的第一個表)以及依賴於該對象的對象(返回的第二個表),腳本如下:

--查詢vCustomersA的依賴的對象以及依賴於vCustomersA的對象

exec sp_depends 'vCustomersA'

查詢的結果如下:

註:sp_depends的代碼是公開的,有興趣的可以看一下其實現過程。

到此,你應該明白,當你更新你的表或視圖的時候,你還要刷新依賴於這些對象的視圖的元數據,即需要調用sp_refreshview來刷新依賴於該對象的視圖。但是你在查詢依賴於一個表或者視圖的對象集合的時候需要注意的一點是,在你更新了一個表或視圖之後,那些之前創建的依賴於該表或視圖的依賴關系將會丟失(你更新的表或視圖所依賴的對象集合不會丟失),用我之前的例子來看,vCustomersB依賴於vCustomersA,那麼當我們修改了vCustomersA以後,vCustomersB與vCustomersA之間的依賴關系將會丟失而vCustomersA所依賴的Customers將不會丟失(依賴關系在對象創建或更新時創建,更新時,會把先前的依賴關系刪掉)。(調用sp_depends你就可以看出來這種微妙的變化)

Ⅱ 怎樣獲得視圖的sql腳本

SQL> create view v_1 as select * from test;

視此大宏圖已建立。

SQL> select text from all_views where view_name='V_1'仿螞;

TEXT
-----------------------------------------------------------------
select "TIME" from test

SQL>森冊

Ⅲ matlab怎麼把變數視圖和腳本放在一起

在腳本文件右上角的大叉下,有一個類似excel的重做按鈕。當你把滑鼠放在上面時,會顯示「dock」。只需點擊它
如果要單獨取出,有一個undo
在MATLAB中創建和調試腳本文件的方法如下:
1打開MATLAB軟體,顯示如下界面。
2之後,當我們看到界面的左上角時,我們將清楚地看到「new」一詞。單擊它。
3在這里,建議您在編寫代碼之前輸入clear和CLC,以便刪除工作區中存儲的變數,以免影響以後編寫的代碼。
4後,點擊頂部綠色運行符號,彈出需要保存的界面。
保存腳本時,我們可以根據自己的需要選擇更好的名稱來保存和運行。
6之後,我們將在工作區中看到所需的a的最終值。這將創建一個腳本文件

Ⅳ 如何用腳本配置IE兼容性視圖設置

【關 鍵 詞】:IE 兼容性視圖
【適用版本】:FusionAccess各版本
【故障模式】:兼容性/應用軟體兼容性
【問題現象】:
通過域策略和用戶配置文件,設定IE的兼容性視圖後,新發放虛擬機兼容性視圖設置沒有效果
兼容性視圖設置界面:工具->兼容性視圖設置

域策略配置界面:

【告警信息】:無
【問題分析】:
通過process monitor抓取IE兼容性視圖設置更改的注冊表項,通過腳本導入到當前登錄用戶的配置文件中。
【解決方法】:
1. 在IE中,通過工具->兼容性視圖設置,配置兼容性視圖列表。
2. 執行如下命令,保存IE中設置後的二進制數據。藍色文本以實際值替換,注意刪除換行符
reg query "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData" /v UserFilter
UserFilterREG_
3. 在模板中配置用戶初次登錄執行腳本,使用戶登錄時生效。
下面是批處理腳本內容,保存在C盤根目錄下IECompat.bat
@echo off
reg add "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData" /v UserFilter /t REG_BINARY /f /
把以下保存為IECompat.vbs,然後放在C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
路徑下
'該本默認僅執行一次
Dim oShell
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.run "C:\IECompat.bat",0
Set oShell = Nothing
'Delete the script
DeleteSelf
Sub DeleteSelf()
Dim objFSO
'Create a File System Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Delete the currently executing script
objFSO.DeleteFile WScript.ScriptFullName
Set objFSO = Nothing
End Sub
【總結&建議】:
該配置方法可單獨作為批處理或vbs腳本雙擊執行使用。

熱點內容
安卓車機開機動畫一般什麼格式 發布:2024-04-28 20:11:21 瀏覽:286
jnic調用java 發布:2024-04-28 20:09:24 瀏覽:278
mpc源碼 發布:2024-04-28 20:08:27 瀏覽:426
windows7python 發布:2024-04-28 19:59:22 瀏覽:616
文件夾2寸 發布:2024-04-28 19:42:48 瀏覽:657
怎麼用伺服器的ip做內網穿透 發布:2024-04-28 19:28:52 瀏覽:925
常用的單向哈希演算法有 發布:2024-04-28 19:16:04 瀏覽:116
牛貝微信淘客源碼 發布:2024-04-28 19:09:16 瀏覽:34
傳奇裝備強化腳本 發布:2024-04-28 18:34:29 瀏覽:329
QQ如何撤銷以儲存的密碼 發布:2024-04-28 18:32:13 瀏覽:322