Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como gerar scripts para adicionar restrições padrão à coluna em várias tabelas no banco de dados SQL Server - SQL Server / TSQL Tutorial Part 94

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