Scenario:
Lavori come sviluppatore SQL Server, la tua azienda ha il database con tonnellate di tabelle. Ogni tabella ha alcune colonne di controllo come CreatedOn, CreatedBy. Nessun vincolo predefinito è mai stato creato su di essi. Vuoi creare il vincolo predefinito sulla colonna CreatedOn per tutte le tabelle con valore getdate(), inoltre vuoi creare il vincolo predefinito per CreatedBy=SUSER_SNAME(). Potresti avere un'altra colonna di tipo string e vorresti generare script per anche quello.Soluzione:
Lo script seguente può essere utilizzato per generare il vincolo predefinito per una determinata colonna nell'intero database per tutte le tabelle. Il nome per il vincolo predefinito sarà DF_SchemaName_TableName_ColumnName.Generiamo script di vincolo predefinito per la colonna CreatedOn con il valore Getdate() utilizzando lo script sottostante.
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
Genera script per aggiungere un vincolo predefinito alla colonna nel database in SQL Server |
Devi solo modificare le variabili @ColumnName e @DefaultValue secondo le tue esigenze. Usiamo lo stesso script per aggiungere il vincolo predefinito alla colonna CreatedBy con valore=SUSER_SNAME().
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
Come generare uno script per aggiungere il vincolo predefinito sulla colonna nel database di SQL Server |
Ora consideriamo che si desidera impostare il valore predefinito su un valore stringa poiché si desidera creare un vincolo predefinito per la regione column='USA' , Quando si imposta il valore della variabile @DefaultValue, aggiungere virgolette singole come mostrato di seguito.
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
Come generare script per aggiungere il vincolo predefinito su una colonna in più tabelle nel database di SQL Server |
Video demo:genera script per aggiungere un vincolo predefinito alla colonna in più tabelle nel database di SQL Server