SQL Server 2005 のテーブルスキーマを取得する方法

@IT のフォーラムで VBA から SQL Server 2005 のテーブルスキーマを取得する方法を尋ねる投稿がありました。
@IT / SQLSqrverでDECIMAL型フィールドの整数桁数を取得したい

回答として鎌田さんが提示された方法はこうです。

SQLServerには使ったことがありませんが、ADOXにはADOX.columnに precisionとNumericScale というプロパティが存在します。

私は SQL を使う方法を提示しました。

SELECT syscolumns.name AS 列名
, syscolumns.xprec AS 有効桁数
, syscolumns.xscale AS 小数点以下桁数
FROM syscolumns
LEFT OUTER JOIN sysobjects
ON syscolumns.id = sysobjects.id
WHERE sysobjects.name = N'テーブル名'

どちらの回答を採用しても解決できたようなので何よりですが、私が提示した方法は SQL Server 2000 時代の手法であり、SQL Server 2005 では別の方法が推奨されています。

SQL Server 2005 では上記クエリがこうなります。

SELECT sys.columns.name AS 列名
, sys.columns.precision AS 有効桁数
, sys.columns.scale AS 小数点以下桁数
FROM sys.columns
LEFT OUTER JOIN sys.tables
ON sys.columns.object_id = sys.tables.object_id
WHERE sys.tables.name = N'テーブル名'

クエリの構造自体は同じですが、SQL Server 2000 用のクエリが sysobject, syscolumns という 互換性ビュー を使用していたのに対して、SQL Server 2005 用のクエリでは sys.tables, sys.columns という カタログ ビュー を使用するように変更されています。

sysobject, syscolumns も互換性のために SQL Server 2005 に残されていますのでそれを使用するクエリは問題なく動作しますが、新たに構築するクエリに関しては カタログ ビュー を使用した方が良いでしょう。

Published 水, 4 5 2006 11:50 by Ryosuke Uemoto

Comments

# re: SQL Server 2005 のテーブルスキーマを取得する方法

Google検索でたどり着きました。

なぜ INNER JOIN ではなく、LEFT OUTER JOIN で結合しているのでしょうか? なにか INNER JOIN ではダメなor避けるべき理由や背景があるのでしょうか?

2008年3月28日 16:53 by developer-adjust