Szenario:
Sie arbeiten als SQL Server-Entwickler, Ihr Unternehmen hat die Datenbank mit unzähligen Tabellen. Jede Tabelle hat einige Audit-Spalten wie z. B. CreatedOn, CreatedBy. Es wurden nie Standardeinschränkungen für sie erstellt. Sie möchten die Standardeinschränkung für die Spalte „CreatedOn“ für alle Tabellen mit dem Wert „getdate()“ erstellen, außerdem möchten Sie eine Standardeinschränkung für „CreatedBy=SUSER_SNAME()“ erstellen. Möglicherweise haben Sie eine andere Spalte vom Typ „String“ und Sie möchten Skripte für diese erstellen das auch.Lösung:
Das folgende Skript kann verwendet werden, um eine Standardeinschränkung für eine bestimmte Spalte in der gesamten Datenbank für alle Tabellen zu generieren. Der Name für Default Constraint lautet DF_SchemaName_TableName_ColumnName.Generieren wir Default Constraint-Skripte für die Spalte CreatedOn mit dem Wert Getdate(), indem wir das folgende Skript verwenden.
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
Generieren Sie Skripts zum Hinzufügen von Standardeinschränkungen zu Spalten in der Datenbank in SQL Server |
Sie müssen nur die Variablen @ColumnName und @DefaultValue gemäß Ihren Anforderungen ändern. Lassen Sie uns dasselbe Skript verwenden, um Default Constraint zu CreatedBy Column mit value=SUSER_SNAME() hinzuzufügen.
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
Generieren eines Skripts zum Hinzufügen einer Standardeinschränkung für eine Spalte in der SQL Server-Datenbank |
Nehmen wir nun an, dass Sie den Standardwert auf einen String-Wert setzen möchten, da wir eine Standardeinschränkung für die Region column='USA' erstellen möchten. Wenn Sie den Wert der @DefaultValue-Variablen festlegen, fügen Sie einfache Anführungszeichen hinzu, wie unten gezeigt.
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
Generieren von Skripts zum Hinzufügen von Standardeinschränkungen für Spalten in mehreren Tabellen in der SQL Server-Datenbank |
Video-Demo:Generieren Sie Skripts zum Hinzufügen einer Standardeinschränkung zu Spalten in mehreren Tabellen in der SQL Server-Datenbank