1select
2 ( case when a.colorder = 1 then d.name else '' end ) 表名,
3 a.colorder 欄位序號,
4 a.name 欄位名,
5 ( case when COLUMNPROPERTY (a.id,a.name,'isidentity') = 1 then '√' else '' end ) 標識,
6 ( case when (
7 select count(*) from sysobjects
8 where name in (
9 select name from sysindexes
10 where (id = a.id ) and ( indid in
11 (select indid from sysindexkeys where
12 ( id = a.id ) and ( colid in (
13 select colid from syscolumns
14 where ( id = a.id ) and ( name = a.name ))))))
15 and ( xtype ='PK')) > 0 then '√' else '' end ) 主鍵,
16 b.name 類型,
17 a.length 位元組數,
18 COLUMNPROPERTY ( a.id,a.name ,'PRECISION' ) as 長度,
19 isnull ( COLUMNPROPERTY ( a.id,a.name ,'Scale'),0) as 小數位元,
20 (case when a.isnullable = 1 then '√' else '' end ) 允許空,
21 isnull ( e.text,'') 預設值,
22 isnull (g.[value],'' ) as 欄位說明
23from syscolumns a left join systypes b
24on a.xtype = b.xusertype
25inner join sysobjects d
26on a.id = d.id and d.xtype='U' and d.name <> 'dtproperties'
27left join syscomments e
28on a.cdefault = e.id
29left join sysproperties g
30on a.id = g.id and a.colid = g.smallid
31order by a.id ,a.colorder
從這個 sql 語句我學到的東西:
1、case when ... then ... else ... end :選擇語句用在 select 語句中,可以將原來用0,1這樣的描述資訊,轉換為實際的含義,而不要在程式中根據查詢出來的結果再進行判斷。這個可以理解為簡單的資料格式化吧。如這條sql 語句中出現的 case when a.isnullable = 1 then '√' else '' end 將資料庫從儲存的 0,1 轉換為了 '√' 和'';
2、left join :使用這種串連方式可以使查詢結果描述出一種內含項目關聯性。
3、isnull 函數:ISNULL ( check_expression , replacement_value ) ,作用是使用指定的替換值替換 NULL,例如下面的 SQL 陳述式中如果一本書的名稱為 null ,則將價格設定為 0.00。
1SELECT SUBSTRING(title, 1, 15) AS Title, type AS Type,
2 ISNULL(price, 0.00) AS Price
3FROM titles
4
4、當然,最重要的是學到這個列出資料庫表資訊(包括表名、欄位名、是否標識、是否主鍵、欄位類型、位元組數、長度、小數位元、允許空、預設值、欄位說明)的 SQL 陳述式。^_^