シナリオ:
あなたはSQLServer開発者として働いています。あなたの会社には、大量のテーブルを含むデータベースがあります。各テーブルには、CreatedOn、CreatedByなどの監査列があります。デフォルトの制約は作成されていません。 getdate()の値を持つすべてのテーブルのCreatedOn列にデフォルトの制約を作成し、CreatedBy =SUSER_SNAME()のデフォルトの制約を作成します。string型の別の列があり、次のスクリプトを生成したい場合があります。それも。解決策:
以下のスクリプトを使用して、すべてのテーブルのデータベース全体の特定の列のデフォルト制約を生成できます。デフォルト制約の名前はDF_SchemaName_TableName_ColumnNameになります。以下のスクリプトを使用して、値Getdate()でCreatedOn列のデフォルト制約スクリプトを生成しましょう。
Declare @ColumnName VARCHAR(128) Declare @DefaultValue VARCHAR(100) SET @ColumnName='CreatedON' SET @DefaultValue='Getdate()' Select Schema_Name(Schema_id) as SchemaName, t.Name as TableName, C.Name as ColumnName, 'Alter Table ['+Schema_Name(Schema_id) +'].['+t.Name+']' +' Add Constraint DF_'+Schema_Name(schema_id) +'_'+t.name +'_'+c.name+'' +' default '+@DefaultValue+' for ' + @ColumnName as CreateDefaultConstraint from sys.tables t inner join sys.columns c on t.object_id=c.object_id and t.is_ms_shipped=0 and c.name=@ColumnName
SQLServerのデータベースの列にデフォルトの制約を追加するスクリプトを生成する |
要件に応じて、@ColumnName変数と@DefaultValue変数のみを変更する必要があります。同じスクリプトを使用して、value =SUSER_SNAME()のCreatedBy列にデフォルトの制約を追加しましょう。
Declare @ColumnName VARCHAR(128) Declare @DefaultValue VARCHAR(100) SET @ColumnName='CreatedBy' SET @DefaultValue='SUSER_SNAME()' Select Schema_Name(Schema_id) as SchemaName, t.Name as TableName, C.Name as ColumnName, 'Alter Table ['+Schema_Name(Schema_id) +'].['+t.Name+']' +' Add Constraint DF_'+Schema_Name(schema_id) +'_'+t.name +'_'+c.name+'' +' default '+@DefaultValue+' for ' + @ColumnName as CreateDefaultConstraint from sys.tables t inner join sys.columns c on t.object_id=c.object_id and t.is_ms_shipped=0 and c.name=@ColumnName
SQLServerデータベースの列にデフォルトの制約を追加するスクリプトを生成する方法 |
ここで、Region column ='USA'のデフォルト制約を作成するため、デフォルト値を文字列値に設定するとします。@ DefaultValue変数の値を設定するときは、以下に示すように一重引用符を追加します。
Declare @ColumnName VARCHAR(128) Declare @DefaultValue VARCHAR(100) SET @ColumnName='Region' SET @DefaultValue='''USA''' Select Schema_Name(Schema_id) as SchemaName, t.Name as TableName, C.Name as ColumnName, 'Alter Table ['+Schema_Name(Schema_id) +'].['+t.Name+']' +' Add Constraint DF_'+Schema_Name(schema_id) +'_'+t.name +'_'+c.name+'' +' default '+@DefaultValue+' for ' + @ColumnName as CreateDefaultConstraint from sys.tables t inner join sys.columns c on t.object_id=c.object_id and t.is_ms_shipped=0 and c.name=@ColumnName
SQLServerデータベースの複数のテーブルの列にデフォルトの制約を追加するスクリプトを生成する方法 |
ビデオデモ:SQLServerデータベースの複数のテーブルの列にデフォルトの制約を追加するスクリプトを生成する