systypesまたはsyscolumnsを使用しないでください。これらは下位互換性ビューです。SQLServer2000+で動作するコードを記述しようとしている場合を除き、sys.typesおよびsys.columnsを使用することを強くお勧めします(どちらもお勧めしません)。 。
すでに知っているタイプに関する情報を取得するには、次の名前を使用します。
SELECT name, precision, scale, max_length
FROM sys.types AS t
WHERE name = 'bVendor';
データベース内のすべてのユーザー定義タイプの情報を取得するには、次のようにします。
SELECT name, precision, scale, max_length
FROM sys.types AS t
WHERE is_user_defined = 1;
特定のテーブルのすべてのタイプ(システムおよびユーザー定義)に関する情報を取得するには、次のようにします。
基本タイプを含めるための更新:
SELECT
[column] = c.name,
[base type] = COALESCE(bt.name, t.name),
[defined type] = t.name,
t.precision,
t.scale,
t.max_length
FROM sys.columns AS c
INNER JOIN sys.types AS t
ON c.system_type_id = t.system_type_id
AND c.user_type_id = t.user_type_id
LEFT OUTER JOIN sys.types AS bt
ON t.is_user_defined = 1
AND bt.is_user_defined = 0
AND t.system_type_id = bt.system_type_id
AND t.user_type_id <> bt.user_type_id
WHERE c.object_id = OBJECT_ID('dbo.your_table_name');
エイリアスタイプ(例)を使用すると、2行が返されることに注意してくださいCREATE TYPE blat FROM nvarchar(32);
。本当にそれらを使用する必要がある場合(私はそれらに対してもお勧めします)、join句を次のように変更します。
ON t.is_user_defined = 1
AND bt.is_user_defined = 0
AND t.system_type_id = bt.system_type_id
AND bt.user_type_id = bt.system_type_id