成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

獲取SQL Server元數(shù)據(jù)的幾種方法

瀏覽:201日期:2023-11-01 14:01:36

元數(shù)據(jù)簡介

元數(shù)據(jù) (metadata) 最常見的定義為'有關數(shù)據(jù)的結構數(shù)據(jù)',或者再簡單一點就是'關于數(shù)據(jù)的信息',日常生活中的圖例、圖書館目錄卡和名片等都可以看作是元數(shù)據(jù)。在關系型數(shù)據(jù)庫管理系統(tǒng) (DBMS) 中,元數(shù)據(jù)描述了數(shù)據(jù)的結構和意義。比如在管理、維護 SQL Server 或者是開發(fā)數(shù)據(jù)庫應用程序的時候,我們經(jīng)常要獲取一些涉及到數(shù)據(jù)庫架構的信息:

某個數(shù)據(jù)庫中的表和視圖的個數(shù)以及名稱 ;

某個表或者視圖中列的個數(shù)以及每一列的名稱、數(shù)據(jù)類型、長度、精度、描述等;

某個表上定義的約束;

某個表上定義的索引以及主鍵/外鍵的信息。

下面我們將介紹幾種獲取元數(shù)據(jù)的方法。

獲取元數(shù)據(jù)

使用系統(tǒng)存儲過程與系統(tǒng)函數(shù)訪問元數(shù)據(jù)

獲取元數(shù)據(jù)最常用的方法是使用 SQL Server 提供的系統(tǒng)存儲過程與系統(tǒng)函數(shù)。

系統(tǒng)存儲過程與系統(tǒng)函數(shù)在系統(tǒng)表和元數(shù)據(jù)之間提供了一個抽象層,使得我們不用直接查詢系統(tǒng)表就能獲得當前數(shù)據(jù)庫對象的元數(shù)據(jù)。

常用的與元數(shù)據(jù)有關的系統(tǒng)存儲過程有以下一些:

系統(tǒng)存儲過程 描述 sp_columns 返回指定表或視圖的列的詳細信息。 sp_databases 返回當前服務器上的所有數(shù)據(jù)庫的基本信息。 sp_fkeys 若參數(shù)為帶有主鍵的表,則返回包含指向該表的外鍵的所有表;若參數(shù)為帶有外鍵的表名,則返回所有同過主鍵/外鍵關系與該外鍵相關聯(lián)的所有表。 sp_pkeys 返回指定表的主鍵信息。 sp_server_info 返回當前服務器的各種特性及其對應取值。 sp_sproc_columns 返回指定存儲過程的的輸入、輸出參數(shù)的信息。 sp_statistics 返回指定的表或索引視圖上的所有索引以及統(tǒng)計的信息。 sp_stored_procedures 返回當前數(shù)據(jù)庫的存儲過程列表,包含系統(tǒng)存儲過程。 sp_tables 返回當前數(shù)據(jù)庫的所有表和視圖,包含系統(tǒng)表。

常用的與元數(shù)據(jù)有關的系統(tǒng)函數(shù)有以下一些:

系統(tǒng)函數(shù) 描述 COLUMNPROPERTY 返回有關列或過程參數(shù)的信息,如是否允許空值,是否為計算列等。 COL_LENGTH 返回指定數(shù)據(jù)庫的指定屬性值,如是否處于只讀模式等。 DATABASEPROPERTYEX 返回指定數(shù)據(jù)庫的指定選項或屬性的當前設置,如數(shù)據(jù)庫的狀態(tài)、恢復模型等。 OBJECT_ID 返回指定數(shù)據(jù)庫對象名的標識號 OBJECT_NAME 返回指定數(shù)據(jù)庫對象標識號的對象名。 OBJECTPROPERTY 返回指定數(shù)據(jù)庫對象標識號的有關信息,如是否為表,是否為約束等。 fn_listextendedproperty 返回數(shù)據(jù)庫對象的擴展屬性值,如對象描述、格式規(guī)則、輸入掩碼等。

由于我們無法直接利用到存儲過程與函數(shù)的返回結果,因此只有在我們關心的只是查詢的結果,而不需要進一步利用這些結果的時候,我們會使用系統(tǒng)存儲過程與系統(tǒng)函數(shù)來查詢元數(shù)據(jù)。

例如,如果要獲得當前服務器上所有數(shù)據(jù)庫的基本信息,我們可以在查詢分析器里面運行:

EXEC sp_databasesGO

在返回結果中我們可以看到數(shù)據(jù)庫的名稱、大小及備注等信息。

但是如果要引用這部分信息,或者存儲這部分信息以供后面使用,那么我們必須借助中間表來完成這個操作:

CREATE TABLE #sp_result(DATABASE_NAME sysname,DATABASE_SIZE int,REMARKS varchar(254) NULL)GOINSERT INTO #sp_result EXEC ('sp_databases')GO

使用信息架構視圖訪問元數(shù)據(jù)

信息架構視圖基于 SQL-92 標準中針對架構視圖的定義,這些視圖獨立于系統(tǒng)表,提供了關于 SQL Server 元數(shù)據(jù)的內(nèi)部視圖。信息架構視圖的最大優(yōu)點是,即使我們對系統(tǒng)表進行了重要的修改,應用程序也可以正常地使用這些視圖進行訪問。因此對于應用程序來說,只要是符合 SQL-92 標準的數(shù)據(jù)庫系統(tǒng),使用信息架構視圖總是可以正常工作的。

常用的信息架構視圖有以下一些:

信息架構視圖 描述 INFORMATION_SCHEMA.CHECK_CONSTRAINTS返回有關列或過程參數(shù)的信息,如是否允許空值,是否為計算列等。 INFORMATION_SCHEMA.COLUMNS返回當前數(shù)據(jù)庫中當前用戶可以訪問的所有列及其基本信息。 INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE返回當前數(shù)據(jù)庫中定義了約束的所有列及其約束名。 INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE返回當前數(shù)據(jù)庫中定義了約束的所有表及其約束名。 INFORMATION_SCHEMA.KEY_COLUMN_USAGE返回當前數(shù)據(jù)庫中作為主鍵/外鍵約束的所有列。 INFORMATION_SCHEMA.SCHEMATA返回當前用戶具有權限的所有數(shù)據(jù)庫及其基本信息。 INFORMATION_SCHEMA.TABLES返回當前用戶具有權限的當前數(shù)據(jù)庫中的所有表或者視圖及其基本信息。 INFORMATION_SCHEMA.VIEWS返回當前數(shù)據(jù)庫中的當前用戶可以訪問的視圖及其所有者、定義等信息。

由于這些信息架構都是以視圖的方式存在的,因此我們可以很方便地獲得并利用需要的信息。

例如,我們要得到某個表有多少列,可以使用以下語句:

SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='mytable'

使用系統(tǒng)表訪問元數(shù)據(jù)

雖然使用系統(tǒng)存儲過程、系統(tǒng)函數(shù)與信息架構視圖已經(jīng)可以為我們提供了相當豐富的元數(shù)據(jù)信息,但是對于某些特殊的元數(shù)據(jù)信息,我們?nèi)匀恍枰苯訉ο到y(tǒng)表進行查詢。因為SQL Server 將所有數(shù)據(jù)庫對象的信息均存放在系統(tǒng)表中,作為 SQL Server 的管理、開發(fā)人員,了解各個系統(tǒng)表的作用將有助于我們了解 SQL Server 的內(nèi)在工作原理。

SQL Server 的系統(tǒng)表非常多,其中最常用的與元數(shù)據(jù)查詢有關的表有如下一些:

系統(tǒng)表 描述 syscolumns 存儲每個表和視圖中的每一列的信息以及存儲過程中的每個參數(shù)的信息。 syscomments 存儲包含每個視圖、規(guī)則、默認值、觸發(fā)器、CHECK 約束、DEFAULT 約束和存儲過程的原始 SQL 文本語句。 sysconstraints 存儲當前數(shù)據(jù)庫中每一個約束的基本信息。 sysdatabases 存儲當前服務器上每一個數(shù)據(jù)庫的基本信息。 sysindexes 存儲當前數(shù)據(jù)庫中的每個索引的信息。 sysobjects 存儲數(shù)據(jù)庫內(nèi)的每個對象(約束、默認值、日志、規(guī)則、存儲過程等)的基本信息。 sysreferences 存儲所有包括 FOREIGN KEY 約束的列。 systypes 存儲系統(tǒng)提供的每種數(shù)據(jù)類型和用戶定義數(shù)據(jù)類型的詳細信息。

將系統(tǒng)存儲過程、系統(tǒng)函數(shù)、信息架構視圖與系統(tǒng)表結合使用,可以方便地讓我們獲得所有需要的元數(shù)據(jù)信息。

示例:1、 獲得當前數(shù)據(jù)庫所有用戶表的名稱。

SELECT OBJECT_NAME (id)FROM sysobjectsWHERE xtype = 'U' AND OBJECTPROPERTY (id, 'IsMSShipped') = 0

其中主要用到了系統(tǒng)表 sysobjects以及其屬性 xtype,還有就是用到了 OBJECTPROPERTY 系統(tǒng)函數(shù)來判斷是不是安裝 SQL Server 的過程中創(chuàng)建的對象。

2、 獲得指定表上所有的索引名稱

SELECT name FROM sysindexesWHERE id = OBJECT_ID ('mytable') AND indid > 0

綜合實例

下面給出了一個存儲過程,它的作用是自動將當前數(shù)據(jù)庫的用戶存儲過程加密。

DECLARE @sp_name nvarchar(400)DECLARE @sp_content nvarchar(2000)DECLARE @asbegin intdeclare @now datetimeselect @now = getdate()DECLARE sp_cursor CURSOR FOR SELECT object_name(id)FROM sysobjectsWHERE xtype = 'P' AND type = 'P' AND crdate < @nowAND OBJECTPROPERTY(id, 'IsMSShipped')=0

OPEN sp_cursor

FETCH NEXT FROM sp_cursor INTO @sp_name

WHILE @@FETCH_STATUS = 0BEGINSELECT @sp_content = text FROM syscomments WHERE id = OBJECT_ID(@sp_name) SELECT @asbegin = PATINDEX ( '%AS' + char(13) + '%', @sp_content) SELECT @sp_content = SUBSTRING(@sp_content, 1, @asbegin - 1) + ' WITH ENCRYPTION AS'+ SUBSTRING (@sp_content, @asbegin+2, LEN(@sp_content))SELECT @sp_name = 'DROP PROCEDURE [' + @sp_name + ']'EXEC sp_executesql @sp_name EXEC sp_executesql @sp_contentFETCH NEXT FROM sp_cursor INTO @sp_nameEND

CLOSE sp_cursor DEALLOCATE sp_cursor

該存儲過程利用了 sysobjects 和 syscomments 表,并巧妙地修改了原存儲過程的 SQL 定義語句,將 AS 修改為了 WITH ENCRYPTION AS,從而達到了加密存儲過程的目的。本存儲過程在 SQL Server 2000 上通過。

成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美在线视频不卡| 国产精品传媒在线| 久久久精品国产免大香伊| 久久精品国产久精国产| 美日韩在线观看| 亚洲视频1区2区| 欧美不卡一卡二卡免费版| 在线不卡欧美精品一区二区三区| 首页国产丝袜综合| 国产欧美综合一区二区三区| 中文字幕日本乱码精品影院| 欧美国产91| 26uuuu精品一区二区| 国产精品亚洲专一区二区三区 | 国产成人av电影免费在线观看| 日本韩国一区二区| 偷拍一区二区三区| 免费一区视频| 亚洲成人免费看| 国产精品一区二区三区免费观看| 国产精品久久久久久妇女6080| 99视频精品全部免费在线| 日韩欧美国产一区二区在线播放| 国产成人啪免费观看软件| 欧美精品乱码久久久久久| 久草精品在线观看| 欧美高清激情brazzers| 国产真实精品久久二三区| 欧美久久高跟鞋激| 国产成人在线看| 欧美一区二区女人| 国产精品亚洲第一| 欧美一卡在线观看| 高清在线不卡av| 精品国产3级a| 91亚洲精华国产精华精华液| 精品日韩一区二区三区| va亚洲va日韩不卡在线观看| 2024国产精品| 牛人盗摄一区二区三区视频| 国产精品国产自产拍在线| 在线成人黄色| 伊人性伊人情综合网| 亚洲欧美日韩精品综合在线观看| 亚洲福利一区二区三区| 色婷婷久久综合| 久久疯狂做爰流白浆xx| 欧美一卡二卡在线| 91小视频在线免费看| 国产精品国产自产拍高清av王其| 亚洲国产高清一区二区三区| 亚洲男同性恋视频| 香港久久久电影| 精品一区二区av| 日韩欧美国产三级电影视频| 91啪在线观看| 亚洲欧美中日韩| 母乳一区在线观看| 精品一区二区三区不卡| 欧美一区二区在线播放| 97国产精品videossex| 国产精品日日摸夜夜摸av| 国产三级精品在线不卡| 免费高清在线一区| 精品91自产拍在线观看一区| 黄色成人av网站| 亚洲在线中文字幕| 欧美日韩激情一区二区| 91污在线观看| 亚洲影院理伦片| 69久久夜色精品国产69蝌蚪网| 欧美二区在线| 亚洲电影你懂得| 日韩一区二区三区视频| 韩日成人av| 美女精品自拍一二三四| 国产午夜精品一区二区| 久久久精品动漫| 国产成人aaaa| 亚洲同性gay激情无套| 色综合久久久网| 成人av高清在线| 一区二区三区四区乱视频| 欧美日韩精品福利| 黄色工厂这里只有精品| 美女在线视频一区| 国产亚洲午夜高清国产拍精品| 国产偷自视频区视频一区二区| 国产精品自拍一区| 中文字幕在线不卡视频| 欧美伊人久久大香线蕉综合69| 成人午夜碰碰视频| 亚洲欧美一区二区三区孕妇| 欧美亚洲禁片免费| 欧美精品国产一区二区| 亚洲一区二区三区免费视频| 欧美一三区三区四区免费在线看| 黄色欧美日韩| 久久精品国内一区二区三区| 日本一区二区三区免费乱视频| 另类av一区二区| 成人午夜免费视频| 亚洲影视在线播放| 精品国产99国产精品| 免费在线观看成人av| 99精品黄色片免费大全| 无吗不卡中文字幕| 欧美激情自拍偷拍| 欧美视频在线播放| 伊人精品成人久久综合软件| 狠狠色狠狠色合久久伊人| 亚洲日韩欧美一区二区在线| 欧美一区二区三区公司| 国产伦精品一区二区三区视频孕妇 | 成人激情校园春色| 一区二区成人在线| 久久亚洲春色中文字幕久久久| 久久精品国产第一区二区三区最新章节| a在线播放不卡| 蜜臀av一区二区| 国产精品高潮呻吟久久| 91精品国产综合久久精品麻豆| 亚洲人成毛片在线播放女女| 不卡在线视频中文字幕| 日韩高清不卡一区二区三区| 中文字幕欧美国产| 337p亚洲精品色噜噜| 先锋影音久久| 91免费看`日韩一区二区| 精品一区二区综合| 亚洲卡通动漫在线| 国产欧美日韩另类视频免费观看 | 久久精品亚洲精品国产欧美kt∨ | 久久精彩视频| 国产精品啊啊啊| 成人性生交大片免费看中文网站| 天天影视涩香欲综合网| 国产精品色一区二区三区| 日韩一区二区三区电影在线观看| 色哟哟欧美精品| 亚洲三级毛片| 97精品久久久久中文字幕| 国产美女主播视频一区| 天天免费综合色| 亚洲女同一区二区| 亚洲国产成人在线| 26uuu国产电影一区二区| 欧美精品乱人伦久久久久久| 色哟哟在线观看一区二区三区| 亚洲色诱最新| 黄色亚洲大片免费在线观看| 国产日韩1区| 欧美日韩一区在线播放| av福利精品导航| 国产精品亚洲综合一区在线观看| 欧美aⅴ一区二区三区视频| 亚洲精品午夜久久久| 国产精品欧美精品| 国产午夜亚洲精品理论片色戒| 精品国产在天天线2019| 欧美一区二区三区日韩| 欧美日韩精品欧美日韩精品| 在线观看国产91| 综合精品久久久| 国产精品日韩精品欧美在线 | 亚洲黄色免费网站| 亚洲欧洲精品成人久久奇米网| 欧美激情艳妇裸体舞| 久久免费美女视频| 精品国产青草久久久久福利| 69堂成人精品免费视频| 欧美乱妇15p| 欧美精品在欧美一区二区少妇| 欧美性感一类影片在线播放| 久久综合中文| 色婷婷久久99综合精品jk白丝| 六月婷婷久久| 免费欧美日韩| 亚洲综合二区| 麻豆av一区二区三区| 老鸭窝毛片一区二区三区| 久久久噜噜噜久久狠狠50岁| 色婷婷精品大视频在线蜜桃视频| 久久综合中文| 欧美亚洲丝袜传媒另类| 欧美性大战xxxxx久久久| 欧美日韩不卡一区| 日韩一区二区免费在线电影| 欧美精品一区二区三区视频| 久久精品网站免费观看| 欧美激情在线观看视频免费| 国产精品免费视频网站| 亚洲视频一区二区免费在线观看| 亚洲精品高清在线观看| 亚洲午夜日本在线观看| 视频一区中文字幕国产| 麻豆91精品视频| 国产盗摄一区二区| 91影院在线观看| 国产精品大片|