日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

java查看sql视图_SQL Server查看视图定义总结

發布時間:2025/4/16 数据库 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java查看sql视图_SQL Server查看视图定义总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在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可以查看系統視圖的定義。

系統視圖無法查看對應的系統定義是因為條件限制原因(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

如果你到這一步以為就結束了的話,那么你太天真了。內置函數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)模式來查看。

USE YourSQLDba;

GO

SELECTOBJECT_DEFINITION(OBJECT_ID(‘sys.parameters$’))AS ObjectDefinition;

GO

CREATE?VIEW sys.parameters$ AS

SELECT c.id AS object_id,

c.number, c.name,

c.colid AS parameter_id,

c.xtype AS system_type_id,

c.utype AS user_type_id,

c.length AS max_length,

c.prec AS?precision,

c.scale AS scale,

sysconv(bit, c.status & 512) AS is_output,??????? -- CPM_OUTPUT

sysconv(bit, c.status & 1024) AS is_cursor_ref,??? -- CPM_CURSORREF

sysconv(bit, isnull(v.objid, 0)) AS has_default_value,

sysconv(bit, c.status & 2048) AS is_xml_document, -- CPM_XML_DOC

v.value?AS default_value,

xmlns AS xml_collection_id,

sysconv(bit, c.status & 4194304) AS is_readonly, -- CPM_IS_READONLY = 0x00400000

sysconv(bit, 1 - (c.status & 1)) AS is_nullable -- CPM_NOTNULL? = 0x00000001

FROM sys.syscolpars c

LEFT?JOIN sys.sysobjvalues v ON v.valclass = 9 AND v.objid = c.id AND v.subobjid = c.colid AND v.valnum = 0??? -- SVC_PARAMDEFAULT

WHERE number > 0 AND has_access('CO', c.id) = 1

其實在專用管理員模式(DAC)下面,雖然能查到sys.parameters$的定義,但是在基表sys.sysschobjs里面找不到sys.parameters$這個對象,其實你可以找到系統的Resource數據庫

一般位于:\Program Files\Microsoft SQL Server\MSSQL.\MSSQL\Binn\下面(以實際安裝路徑為準),名字為mssqlsystemresource.mdf ,你可以將其Copy到其它位置后,然后附加重命名為一個數據庫,例如我附加為resource數據庫,然后你就可以在SSMS界面直接獲取系統視圖的定義了。

注意,在SQL Server 2014測試發現,SQL Server里面看不到System Tables下的相關基表了,應該是其屏蔽了這些功能,下面截圖是在SQL Server 2008 R2測試環境。

參考資料:

總結

以上是生活随笔為你收集整理的java查看sql视图_SQL Server查看视图定义总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。