SQLServer 列出每個表的列和屬性

2021-08-27 07:49:40 字數 2544 閱讀 8523

當需要整理乙個資料庫幫助文件是,可能需要列出庫中每個表的列及其屬性。這可能在開發一些介面或者外包給別的公司時有幫助。如果需要別人開啟sql server management studio (ssms)來乙個乙個檢視,無疑是一種折磨。

解決這個問題可以考慮使用系統的目錄檢視:sys.tables、sys.all_columns、sys.types

提供資料庫中每個表對應的一行資料。包括使用者表和系統表。而其中的is_ms_shipped列,代表是否為系統表。這在你需要僅僅顯式使用者表的時候很有用。而不需要在sys.sysobject相容性檢視中通過type=』u』來篩選。

資料庫每乙個物件的每一列都會返回一行,很多列和sys.type是相同的。但是有些列只能在sys.type中查詢。

此目錄檢視儲存系統或者使用者自定義資料型別及它們的屬性。本文中所需的是資料型別的名字,這列在sys.all_columns中是沒有的。同時資料庫的排序規則會影響sys.types,所以對於系統內建型別如text,ntext,vachar(),char(),nvarchar(),nchar()會因為資料庫不同而不同。

如非必須,最好只查詢當前資料庫的內容而不要跨資料庫,因為這些檢視是基於單個資料庫的。執行以下語句:

use adventureworks

goselect object_schema_name(t.[object_id], db_id()) as [架構名] ,

t.[name] as [表名] ,

ac.[name] as [列名] ,

ty.[name] as [系統資料型別] ,

ty.is_user_defined as [是否使用者自定義型別],--1 = 使用者定義型別,0 = sql server 系統資料型別

ac.[max_length] [最大長度],

ac.[precision] [精確度],--如果列包含的是數值,則為該列的精度;否則為0

ac.[scale] [數值範圍],--如果列包含的是數值,則為列的小數字數;否則為0

ac.[is_nullable] [是否允許為空],

ac.[is_ansi_padded][是否使用ansi_padding]--1 = 如果列為字元、二進位制或變數型別,則該列使用ansi_padding on 行為

from sys.[tables] as t

inner join sys.[all_columns] ac on t.[object_id] = ac.[object_id]

inner join sys.[types] ty on ac.[system_type_id] = ty.[system_type_id]

and ac.[user_type_id] = ty.[user_type_id]

where t.[is_ms_shipped] = 0

order by t.[name] ,

ac.[column_id]

可以得到:

由於某些原因需要在別的庫上查詢另外乙個庫的資訊時,需要硬編碼,如下,可以得到相同的結果:

use [master] 

goselect object_schema_name(t.[object_id], db_id('adventureworks')) as [架構名] ,

t.[name] as [表名] ,

ac.[name] as [列名] ,

ty.[name] as [系統資料型別] ,

ty.is_user_defined as [是否使用者自定義型別],--1 = 使用者定義型別,0 = sql server 系統資料型別

ac.[max_length] [最大長度],

ac.[precision] [精確度],--如果列包含的是數值,則為該列的精度;否則為0

ac.[scale] [數值範圍],--如果列包含的是數值,則為列的小數字數;否則為0

ac.[is_nullable] [是否允許為空],

ac.[is_ansi_padded][是否使用ansi_padding]--1 = 如果列為字元、二進位制或變數型別,則該列使用ansi_padding on 行為

from adventureworks.sys.[tables] as t

inner join adventureworks.sys.[all_columns] ac on t.[object_id] = ac.[object_id]

inner join adventureworks.sys.[types] ty on ac.[system_type_id] = ty.[system_type_id]

and ac.[user_type_id] = ty.[user_type_id]

where t.[is_ms_shipped] = 0

order by t.[name] ,

ac.[column_id]

最後,通過這些查詢結果,可以把資料匯出到excel裡面供使用。

檢視SQLServer資料庫每個表占用的空間大小

建立儲存過程 create procedure dbo sys viewtablespace as begin set nocount on create table dbo tableinfo 表名 varchar 50 collate chinese prc ci as null 記錄數 int...

SQL Server 資料庫每個表占用的空間 大小

檢視mssql資料庫每個表占用的空間大小 sp spaceused 顯示行數 保留的磁碟空間以及當前資料庫中的表所使用的磁碟空間,或顯示由整個資料庫保留和使用的磁碟空間。語法sp spaceused objname objname updateusage updateusage 引數 objname...

列出表資訊

select 表名 case when a.colorder 1 then d.name else end,表說明 case when a.colorder 1 then isnull f.value,else end,字段序號 a.colorder,欄位名 a.name,標識 case when ...