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


