2019-2-25SqlServer 中所有表、列、視圖、索引、主鍵、外鍵等常用sql
阿新 • • 發佈:2019-02-25
order 表示 npr left exe 指定 條件 臨時對象 user
sp_help Accounts_Users 其中Accounts_Users 表示表名
sp_columns Accounts_Users
exec sp_helpconstraint ‘表名‘
在數據庫內創建的每個對象(約束、默認值、日誌、規則、存儲過程等)在表中占一行。只有在 tempdb 內,每個臨時對象才在該表中占一行。
sysobjects 表結構:
根據sysobjects 表格我們可以得到如下的查詢:
1.獲取所有表結構
select name as [表名] from sysobjects where xtype=‘U‘and name !=‘dtproperties‘
2.獲取所有的列
SELECT d.name 表名, a.name 字段名, ( CASE WHEN Columnproperty(a.id, a.name, ‘IsIdentity‘) = 1 THEN ‘是‘ ELSE ‘否‘ END ) 標識, ( CASE WHEN Columnproperty(a.id, a.name, ‘IsIdentity‘) = 1 THEN IDENT_Seed( d.name ) ELSE 0 END ) 標識種子 , ( CASE WHEN Columnproperty(a.id, a.name, ‘IsIdentity‘) = 1 THEN Ident_Incr(d.name) ELSE 0 END ) 標識增長量, ( CASE WHEN (SELECT Count(*) FROM sysobjects WHERE ( name IN (SELECT name FROM sysindexes WHERE ( id = a.id ) AND ( indid IN (SELECT indid FROM sysindexkeys WHERE ( id = a.id ) AND ( colid IN (SELECT colid FROM syscolumns WHERE ( id = a.id ) AND ( name = a.name )) )) )) ) AND ( xtype = ‘PK‘ )) > 0 THEN ‘是‘ ELSE ‘否‘ END ) 主鍵, b.name 類型, a.length 占用字節數, Columnproperty(a.id, a.name, ‘PRECISION‘) AS 長度, Isnull(Columnproperty(a.id, a.name, ‘Scale‘), 0) AS 小數位數, ( CASE WHEN a.isnullable = 1 THEN ‘是‘ ELSE ‘否‘ END ) 允許空, Isnull(e.text, ‘‘) 默認值, Isnull(g.[value], ‘ ‘) AS [說明] FROM syscolumns a LEFT JOIN systypes b ON a.xtype = b.xusertype left JOIN sysobjects d ON a.id = d.id AND d.xtype = ‘U‘ AND d.name <> ‘dtproperties‘ LEFT JOIN syscomments e ON a.cdefault = e.id LEFT JOIN sys.extended_properties g ON a.id = g.major_id AND a.colid = g.minor_id LEFT JOIN sys.extended_properties f ON d.id = f.class AND f.minor_id = 0 WHERE b.name IS NOT NULL and d.name is not null --and d.name=‘{0}‘ --如果只查詢指定表,加上此條件 ORDER BY a.id, a.colorder
3.獲取所有的視圖
select b.name as [視圖名稱],a.text as [視圖腳本] from syscomments a inner join sysobjects b on a.id=b.id where b.type=‘V‘
4.獲取所有主鍵約束
SELECT tab.name AS [表名], idxCol.is_descending_key as [是否降序], idx.name AS [約束名稱], idx.type_desc as [約束類型], col.name AS [約束列名] FROM sys.indexes idx JOIN sys.index_columns idxCol ON (idx.object_id = idxCol.object_id AND idx.index_id = idxCol.index_id AND idx.is_primary_key = 1) JOIN sys.tables tab ON (idx.object_id = tab.object_id) JOIN sys.columns col ON (idx.object_id = col.object_id AND idxCol.column_id = col.column_id);
5.獲取所有唯一約束
SELECT tab.name AS [表名], idxCol.is_descending_key as [是否降序], idx.name AS [約束名稱], idx.type_desc as [約束類型], col.name AS [約束列名] FROM sys.indexes idx JOIN sys.index_columns idxCol ON (idx.object_id = idxCol.object_id AND idx.index_id = idxCol.index_id AND idx.is_unique_constraint = 1) JOIN sys.tables tab ON (idx.object_id = tab.object_id) JOIN sys.columns col ON (idx.object_id = col.object_id AND idxCol.column_id = col.column_id);
6.獲取所有外鍵約束
select oSub.name AS [子表名稱], fk.name AS [外鍵名稱], SubCol.name AS [子表列名], oMain.name AS [主表名稱], MainCol.name AS [主表列名] from sys.foreign_keys fk JOIN sys.all_objects oSub ON (fk.parent_object_id = oSub.object_id) JOIN sys.all_objects oMain ON (fk.referenced_object_id = oMain.object_id) JOIN sys.foreign_key_columns fkCols ON (fk.object_id = fkCols.constraint_object_id) JOIN sys.columns SubCol ON (oSub.object_id = SubCol.object_id AND fkCols.parent_column_id = SubCol.column_id) JOIN sys.columns MainCol ON (oMain.object_id = MainCol.object_id AND fkCols.referenced_column_id = MainCol.column_id)
7.獲取所有Check約束
SELECT tab.name AS [表名], chk.name AS [約束名稱], col.name AS [約束列名], chk.definition AS [約束定義] FROM sys.check_constraints chk JOIN sys.tables tab ON (chk.parent_object_id = tab.object_id) JOIN sys.columns col ON (chk.parent_object_id = col.object_id AND chk.parent_column_id = col.column_id)
8.獲取所有默認約束
SELECT tab.name AS [表名], def.name AS [約束名稱], col.name AS [約束列名], def.definition AS [約束定義] FROM sys.default_constraints def JOIN sys.tables tab ON (def.parent_object_id = tab.object_id) JOIN sys.columns col ON (def.parent_object_id = col.object_id AND def.parent_column_id = col.column_id)
9.獲取所有索引約束
SELECT tab.name AS [表名], idx.is_unique as [是否唯一索引], idxCol.is_descending_key as [是否降序], idx.name AS [約束名稱], idx.type_desc as [約束類型], col.name AS [約束列名] FROM sys.indexes idx JOIN sys.index_columns idxCol ON (idx.object_id = idxCol.object_id AND idx.index_id = idxCol.index_id AND idx.is_unique_constraint= 0 and is_primary_key=0) JOIN sys.tables tab ON (idx.object_id = tab.object_id) JOIN sys.columns col ON (idx.object_id = col.object_id AND idxCol.column_id = col.column_id);
2019-2-25SqlServer 中所有表、列、視圖、索引、主鍵、外鍵等常用sql