1. ホーム
  2. sql-server

[解決済み] SQL ServerからADOを使ってビュー定義を取得する方法はありますか?

2022-12-01 12:17:17

質問

ADO 接続を使用して、SQL サーバー上でホストされているデータベースからカラム定義を抽出することに成功しました。 OpenSchema() 呼び出しを使用して、SQL サーバー上でホストされているデータベースから列の定義を抽出することに成功しました。これまでのところ、とても順調です。

上記のテーブルとの主なやりとりは、複数のビューを使用して行われます。 OpenSchema() はテーブルの列の定義を返すのと同じ方法でビューの列の定義を返すことができますが、重要な情報が欠落しています。

ADOX Catalog Views を使用してビューを作成するために使用した SQL コマンドにアクセスしようとしましたが、使用している SQL Server 用の OLEDB ドライバーはこの機能をサポートしていないようです。

ADO を介してビュー構成のこの情報を取得する方法はありますか?

どのように解決するのですか?

SQL Server のバージョンは?

SQL Server 2005 以降の場合、ビューの作成に使用した SQL スクリプトは以下のように取得することができます。

select definition
from sys.objects     o
join sys.sql_modules m on m.object_id = o.object_id
where o.object_id = object_id( 'dbo.MyView')
  and o.type      = 'V'

これは、ビューを作成/変更するために使用されたスクリプトを含む単一の行を返します。

テーブルの他の列は、ビューがコンパイルされた時点で配置されているオプションについて教えてくれます。

注意事項

  • ビューがALTER VIEWで最後に修正された場合、スクリプトはCREATE VIEW文ではなくALTER VIEW文になります。

  • スクリプトは、作成されたときの名前を反映します。ALTER VIEWを実行した場合、または、CREATE VIEWでビューを削除し再作成した場合のみ、この名前は更新されます。ビューの名前が変更された場合(例えば sp_rename によって)ビューの名前が変更されたり、所有権が異なるスキーマに移った場合、戻ってくるスクリプトは元のCREATE/ALTER VIEWステートメントを反映したものとなり、オブジェクトの現在の名前は反映されません。

  • いくつかのツールは出力を切り捨てます。例えば、MS-SQLコマンドラインツールのsqlcmd.exeは、255文字でデータを切り捨てます。パラメータ -y N で結果を得るには N の文字になります。