SQL Server でテーブルの 'CREATE TABLE..' 定義を取得する標準的な方法はありますか?
ビューや関数・手続きの定義はINFORMATION_SCHEMAに聞けばいいので、テーブルも同じように出てくるのが自然だろうと思ったのですが、何も見つかりませんでした。
SQL Server でテーブルの 'CREATE TABLE..' 定義を取得する標準的な方法はありますか?
ビューや関数・手続きの定義はINFORMATION_SCHEMAに聞けばいいので、テーブルも同じように出てくるのが自然だろうと思ったのですが、何も見つかりませんでした。
はい -INFORMATION_SCHEMA.TABLES
あなたが探しているものでなければなりません。
次のようなものが得られます。
aspnetdb dbo aspnet_Paths BASE TABLE
aspnetdb dbo aspnet_PersonalizationAllUsers BASE TABLE
aspnetdb dbo aspnet_PersonalizationPerUser BASE TABLE
aspnetdb dbo vw_aspnet_WebPartState_Paths VIEW
aspnetdb dbo vw_aspnet_WebPartState_Shared VIEW
aspnetdb dbo vw_aspnet_WebPartState_User VIEW
aspnetdb dbo aspnet_Applications BASE TABLE
テーブルの列について知りたい場合は、 を参照してくださいINFORMATION_SCHEMA.COLUMNS
。
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'aspnet_Users'
指定されたテーブルの列のすべての詳細が表示されます。
ビューとコードにINFORMATION_SCHEMAを使用すると失敗します。データはnvarchar(4000)に制限されているため、それより長いデータは読み取られません。sys.sql_modulesまたはOBJECT_DEFINITIONを使用します。
テーブルの場合、それはより困難です。「テーブル」は、列、制約、インデックス、場合によってはルール、UDTで構成されます(何か忘れましたか?)。これが、SSMSにビューまたはストアドプロシージャと比較して非常に多くのテーブルスクリプトオプションがある理由です。
SSMSのプロファイリングをお勧めしますが、SMOを使用しないことをお勧めします...またはCLRコードまたはxp_cmdshellを介してSMOを使用します。
.NET から SMO (Microsoft.SqlServer.Smo) を使用して、テーブルのスクリプトを作成できます。