なんか、必要になるたびに同じような SQL を作ってたんで、
メモ代わり。

SELECT
    T.name,C.column_id,
    C.name,
    CASE
        WHEN TY.name IN (’binary’,’varbinary’)
            THEN TY.name + ’(’ +
                CASE
                    WHEN C.max_length = -1
                        THEN ’max’
                    ELSE
                        CAST(C.max_length AS nvarchar(10))
                END + ’)’
        WHEN TY.name IN (’nvarchar’,’nchar’)
            THEN TY.name + ’(’ +
                CASE
                    WHEN C.max_length = -1
                        THEN ’max’
                    ELSE
                        CAST(C.max_length / 2 AS nvarchar(10))
                END + ’)’
        WHEN TY.name IN (’decimal’,’numeric’)
            THEN TY.name + ’(’ +
                CAST(C.precision AS nvarchar(10)) +
                CASE
                    WHEN C.scale = 0
                        THEN ’’
                    ELSE
                        ’,’ + CAST(C.scale AS nvarchar(10))
                END + ’)’
        ELSE
             TY.name
    END AS [type],
    CASE C.is_nullable
        WHEN 1 THEN ’Y’
        WHEN 0 THEN ’N’
    END AS NULLABLE
FROM
    sys.tables T
    INNER JOIN sys.columns C
    ON T.object_id = C.object_id
    INNER JOIN sys.types TY
    ON TY.USER_TYPE_ID = C.USER_TYPE_ID
ORDER BY
    T.name,C.column_id

---
平成20年5月30日追記
半角が全角になったりして、
メモ書きとしては使いづらい><

---
平成22年8月31日
sys.tables, sys.columns, sys.types を小文字にした。
別荘にコードを書いた
平成23年2月15日
別荘のURL変更
http://kazamai7610.wordpress.com/2010/08/31/ms-sql-server-200520082008r2-%e3%81%ae%e5%88%97%e4%b8%80%e8%a6%a7%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e5%9e%8b%e5%ae%9a%e7%be%a9%e4%bb%98%e3%81%8d/

コメント