SQL Server查看視圖定義總結

来源:https://www.cnblogs.com/kerrycode/archive/2018/04/11/8795322.html
-Advertisement-
Play Games

在SQL Server中如何查看資料庫視圖的定義呢? 其實官方文檔已經有一個較詳細的總結了,這裡在官方文檔的基礎上,我們再深入展開分析一下,例如如何獲取系統視圖的定義。知其然知其所以然嗎。 1:使用SQL Server Management Studio(SSMS) 在“對象資源管理器”中,首先找到... ...


 

在SQL Server中如何查看資料庫視圖的定義呢? 其實官方文檔已經有一個較詳細的總結了,這裡在官方文檔的基礎上,我們再深入展開分析一下,例如如何獲取系統視圖的定義。知其然知其所以然嗎。

 

1:使用SQL Server Management Studio(SSMS)

 

對象資源管理器中,首先找到對應資料庫中需要查看定義的視圖,右鍵單擊獲取對象的定義腳本。這種方式非常簡單。在此略過。

 

 

2:通過腳本查看視圖的定義。

 

 

可以通過下麵三種方式獲取定義腳本,如下所示

 

USE YourSQLDba;  
GO  
SELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_bound  
FROM sys.sql_modules  
WHERE object_id = OBJECT_ID('PerfMon.SessionInfo');   
GO  
 
 
 
 
 
USE YourSQLDba;  
GO 
SELECT OBJECT_DEFINITION (OBJECT_ID('PerfMon.SessionInfo')) AS ObjectDefinition;   
GO  
 
 
 
 
USE YourSQLDba;  
GO 
EXEC sp_helptext 'PerfMon.SessionInfo'; 

 

 

 

那麼上面方式可以查看系統視圖的定義嗎? 實驗驗證測試一下即可知道。

 

1:首先,在SSMS的對象資源管理器中是是無法查看系統視圖的定義的。SSMS直接屏蔽了相關功能。

 

2:上面三種腳本方式,sys.sql_modules 無法查看系統視圖定義,內置函數OBJECT_DEFINITION、系統存儲過程OBJECT_DEFINITION可以查看系統視圖的定義。

 

    clip_image001

 

 

系統視圖無法查看對應的系統定義是因為條件限制原因(has_access('CO', o.id) = 1),如下所示:

 

SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
CREATE VIEW sys.sql_modules AS
    SELECT object_id = o.id,
        definition = object_definition(o.id),
        uses_ansi_nulls = sysconv(bit, o.status & 0x40000),             -- OBJMOD_ANSINULLS
        uses_quoted_identifier = sysconv(bit, o.status & 0x80000),      -- OBJMOD_QUOTEDIDENT
        is_schema_bound = sysconv(bit, o.status & 0x20000),             -- OBJMOD_SCHEMABOUND
        uses_database_collation = sysconv(bit, o.status & 0x100000),    -- OBJMOD_USESDBCOLL
        is_recompiled = sysconv(bit, o.status & 0x400000),              -- OBJMOD_NOCACHE
        null_on_null_input = sysconv(bit, o.status & 0x200000),         -- OBJMOD_NULLONNULL
        execute_as_principal_id = x.indepid,
        uses_native_compilation = sysconv(bit, case when (o.type = 'P') then o.status & 0x00000200 else 0 end)    -- OBJPRC_HEKATON
    FROM sys.sysschobjs o
    LEFT JOIN sys.syssingleobjrefs x ON x.depid = o.id AND x.class = 22 AND x.depsubid = 0 -- SRC_OBJEXECASOWNER
    WHERE o.pclass <> 100 -- x_eunc_Server
        AND ((o.type = 'TR' AND has_access('TR', o.id, o.pid, o.nsclass) = 1)
            OR (type IN ('P','V','FN','IF','TF','RF','IS') AND has_access('CO', o.id) = 1)
            OR (type IN ('R','D') AND o.pid = 0))
        AND (o.status2 & 0x00000020) = 0
 
GO

 

   

    clip_image002

 

 

   

    clip_image003

 

 

如果你到這一步以為就結束了的話,那麼你太天真了。內置函數OBJECT_DEFINITION、系統存儲過程OBJECT_DEFINITION對於有些視圖也束手無策。如下所示,獲取系統視圖sys.parameters的定義如下。

CREATE VIEW sys.parameters
AS
    SELECT  object_id ,
            name ,
            parameter_id ,
            system_type_id ,
            user_type_id ,
            max_length ,
            PRECISION ,
            scale ,
            is_output ,
            is_cursor_ref ,
            has_default_value ,
            is_xml_document ,
            default_value ,
            xml_collection_id ,
            is_readonly ,
            is_nullable
    FROM    sys.parameters$
    WHERE   number = 1

 

 

其實對象sys.parameters$也是一個視圖,正常情況下是無法查看sys.parameters$這個對象的,在專用管理員模式(DAC)下麵才可以查看sys.parameters$的定義,而且只能通過系統內置函數OBJECT_DEFINITION,而sp_helptext 是會報錯的。如果你要弄清楚一些系統視圖的定義,那麼基本上就要藉助專用管理員模式(DAC)模式來查看。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在SQL Server日常的函數、存儲過程和SQL語句中,經常會用到不同數據類型的轉換。在SQL Server有兩種數據轉換類型:一種是顯性數據轉換;另一種是隱性數據轉換。下麵分別對這兩種數據類型轉換進行簡要的說明: 1 顯式轉換 顯示轉換是將某種數據類型的表達式顯式轉換為另一種數據類型。常用的是C ...
  • 資料庫 表 發生變化,需要把2.0的表數據 同步到3.0庫中去; -- 同步數據存儲過程執行 -- 更新留言舊表數據到新表數據中 /*DEFINER:Vector*/ drop procedure if exists p_for_feedback_message; create procedure ...
  • 最近在梳理資料庫程式連接信息,這裡對腳本做個總結,希望對需要的同仁有所幫助 一、Oracle連接信息統計 sys_context函數使用方法以及含義如下: 二、SQLServer連接信息統計 三、MySQL連接信息統計 四、PG連接信息統計 ...
  • 轉自:http://www.maomao365.com/?p=4942 下文主要講述:重覆數據只獲取一條的方法 row_number函數在資料庫中的功能是為每一行 按照一定的規則生成一個編號,我們常常利用這一屬性,對錶進行分頁操作,下文我們將講述採用 row_number函數刪除表中重覆數據行 ...
  • 本文內容: 連接查詢 聯合查詢 子查詢 from子查詢 where子查詢 exists子查詢 首發日期:2018-04-11 連接查詢: 連接查詢就是將多個表聯合起來查詢,連接查詢方式有內連接、外連接、自然連接、交叉連接。連接查詢使得可以同時查看多張表中數據。 內連接:有條件連接,多個表之間依據指定... ...
  • 文件組的基本知識點介紹完畢後,根據場景引入中的內容,我們將利用SQL Server文件組技術來實現冷熱數據隔離備份的方案設計介紹如下。 設計分析 由於payment資料庫過大,超過10TB,單次全量備份超過20小時,如果按照常規的完全備份,會導致備份文件過大、耗時過長、甚至會因為備份操作對I/O能力 ...
  • 目標 使用Oracle Enterprise Manager監視性能 使用自動記憶體管理(AMM) 使用記憶體指導調整記憶體緩衝區的大小 查看與性能相關的動態視圖 排除無效和不可用對象產生的故障 性能監視 管理記憶體組件 自動記憶體管理(AMM):指定分配給實例的總記憶體(包括SGA和PGA) 自動共用記憶體管理 ...
  • 摘要: HBase可以說是一個資料庫,也可以說是一個存儲。擁有雙重屬性的HBase天生就具備廣闊的應用場景。在2.0中,引入了OffHeap降低了延遲,可以滿足線上的需求。引入MOB,可以存儲10M左右的對象,完全適應了對象存儲。另外由於自身的併發能力、存儲能力,可以說是具有最為競爭力的引擎 HBa ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...