SQL語句如何獲取表的字段預設值和描述資訊

2021-06-04 11:50:36 字數 2780 閱讀 9757

select

tablename=case when c.column_id=1 then o.name else n'' end,

tabledesc=isnull(case when c.column_id=1 then ptb.[value] end,n''),

column_id=c.column_id,

columnname=c.name,

primarykey=isnull(idx.primarykey,n''),

[identity]=case when c.is_identity=1 then n'√'else n'' end,

computed=case when c.is_computed=1 then n'√'else n'' end,

type=t.name,

length=c.max_length,

precision=c.precision,

scale=c.scale,

nullable=case when c.is_nullable=1 then n'√'else n'' end,

[default]=isnull(d.definition,n''),

columndesc=isnull(pfd.[value],n''),

indexname=isnull(idx.indexname,n''),

indexsort=isnull(idx.sort,n''),

create_date=o.create_date,

modify_date=o.modify_date

from sys.columns c

inner join sys.objects o

on c.[object_id]=o.[object_id]

and o.type='u'

and o.is_ms_shipped=0

inner join sys.types t

on c.user_type_id=t.user_type_id

left join sys.default_constraints d

on c.[object_id]=d.parent_object_id

and c.column_id=d.parent_column_id

and c.default_object_id=d.[object_id]

left join sys.extended_properties pfd

on pfd.class=1

and c.[object_id]=pfd.major_id

and c.column_id=pfd.minor_id

--             and pfd.name='caption'  -- 字段說明對應的描述名稱(乙個字段可以新增多個不同name的描述)

left join sys.extended_properties ptb

on ptb.class=1

and ptb.minor_id=0

and c.[object_id]=ptb.major_id

--             and pfd.name='caption'  -- 表說明對應的描述名稱(乙個表可以新增多個不同name的描述)

left join                       -- 索引及主鍵資訊

(select

idxc.[object_id],

idxc.column_id,

sort=case indexkey_property(idxc.[object_id],idxc.index_id,idxc.index_column_id,'isdescending')

when 1 then 'desc' when 0 then 'asc' else '' end,

primarykey=case when idx.is_primary_key=1 then n'√'else n'' end,

indexname=idx.name

from sys.indexes idx

inner join sys.index_columns idxc

on idx.[object_id]=idxc.[object_id]

and idx.index_id=idxc.index_id

left join sys.key_constraints kc

on idx.[object_id]=kc.[parent_object_id]

and idx.index_id=kc.unique_index_id

inner join  -- 對於乙個列包含多個索引的情況,只顯示第1個索引資訊

(select [object_id], column_id, index_id=min(index_id)

from sys.index_columns

group by [object_id], column_id

) idxcuq

on idxc.[object_id]=idxcuq.[object_id]

and idxc.column_id=idxcuq.column_id

and idxc.index_id=idxcuq.index_id

) idx

on c.[object_id]=idx.[object_id]

and c.column_id=idx.column_id

-- where o.name=n'要查詢的表'       -- 如果只查詢指定表,加上此條件

order by o.name,c.column_id

sql語句刪除帶預設值的字段

方法一 前提是 當你知道預設值的約束名的名字。如 df 欄位名 alter table shangpin drop constraint df 欄位名 alter table shangpin drop column 欄位名 約束名與欄位名都不需要加單引號 方法二 declare df varcha...

sql語句預設值 MySQL中慢語句如何記錄?

實際工作中經常會遇到資料庫操作突然變慢的情況,但是檢查了各種硬體設施以及網路監控後發現都沒有什麼問題 這時候就要從資料庫入手了,而慢sql是我們工作中經常會遇到的影響查詢效能的情況。本文將介紹如何在mysql中獲取慢sql。一 資料庫中通過日誌記錄慢sql的幾個配置項 1.slow query lo...

如何自動填充SQL語句中的公共字段

我們在設計資料庫的時候一定會帶上新增 更新的時間 操作者等審計資訊。之所以帶這些資訊是因為假如有一天公司的資料庫被人為刪了,儘管可能有資料庫備份可以恢復資料。但是我們仍然需要追蹤到這個事是誰幹的,在什麼時間幹的,具體幹了哪些事等等,方便定責和修補。但是我們變更每條資料都要去顯式變更這些資訊就十分繁瑣...