Cenário:
Você está trabalhando como SQL Server Developer, sua empresa tem o banco de dados com toneladas de tabelas. Cada Tabela tem algumas colunas de auditoria, como CreatedOn, CreatedBy. Nenhuma restrição padrão foi criada neles. Você deseja criar a restrição padrão na coluna CreatedOn para toda a tabela com o valor getdate(), também deseja criar a restrição padrão para CreatedBy=SUSER_SNAME(). Você pode ter outra coluna do tipo string e gostaria de gerar scripts para isso também.Solução:
O script abaixo pode ser usado para gerar a restrição padrão para determinada coluna em todo o banco de dados para todas as tabelas. O nome da restrição padrão será DF_SchemaName_TableName_ColumnName.Vamos gerar scripts de restrição padrão para a coluna CreatedOn com o valor Getdate() usando o script abaixo.
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
Gerar scripts para adicionar restrição padrão à coluna no banco de dados no SQL Server |
Você só precisa fazer alterações nas variáveis @ColumnName e @DefaultValue conforme seus requisitos. Vamos usar o mesmo script para adicionar Default Constraint a CreatedBy Column com value=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
Como gerar script para adicionar restrição padrão na coluna no banco de dados SQL Server |
Agora vamos considerar que você deseja definir o valor padrão para algum valor de string, pois queremos criar uma restrição padrão para a região column='USA' , quando definir o valor da variável @DefaultValue, adicione aspas simples conforme mostrado abaixo.
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
Como gerar scripts para adicionar restrição padrão na coluna em várias tabelas no banco de dados SQL Server |
Demonstração em vídeo:gere scripts para adicionar restrição padrão à coluna em várias tabelas no banco de dados SQL Server