sql >> Database >  >> RDS >> Sqlserver

Scripts genereren om standaardbeperkingen toe te voegen aan kolommen in meerdere tabellen in SQL Server-database - SQL Server / TSQL-zelfstudie, deel 94

Scenario:

U werkt als SQL Server Developer, uw bedrijf heeft de database met tonnen tabellen. Elke tabel heeft enkele controlekolommen, zoals CreatedOn, CreatedBy. Er zijn nooit standaardbeperkingen voor gemaakt. U wilt de standaardbeperking op CreatedOn-kolommen maken voor alle tabellen met de waarde getdate(), en u wilt ook een standaardbeperking maken voor CreatedBy=SUSER_SNAME(). Mogelijk hebt u een andere kolom van het type string en wilt u scripts genereren voor dat ook.

Oplossing:

Het onderstaande script kan worden gebruikt om de standaardbeperking voor een bepaalde kolom in de volledige database voor alle tabellen te genereren. De naam voor Default Constraint is DF_SchemaName_TableName_ColumnName.
Laten we Default Constraint-scripts genereren voor de kolom CreatedOn met de waarde Getdate() door onderstaand script te gebruiken.

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
 
 
Scripts genereren om standaardbeperkingen toe te voegen aan kolom in database in SQL Server
 U hoeft alleen de variabelen @ColumnName en @DefaultValue te wijzigen volgens uw vereisten. Laten we hetzelfde script gebruiken om Default Constraint aan CreatedBy Column toe te voegen met 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
 
Script genereren om standaardbeperking toe te voegen aan kolom in SQL Server-database
 
Laten we nu eens overwegen dat u de standaardwaarde wilt instellen op een tekenreekswaarde, omdat we een standaardbeperking voor regio column='USA' willen maken. Wanneer u de waarde van de @DefaultValue-variabele instelt, voegt u enkele aanhalingstekens toe zoals hieronder wordt weergegeven.
br />
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
 
 
Scripts genereren om standaardbeperkingen toe te voegen aan kolommen in meerdere tabellen in SQL Server-database
 
 
Videodemo:scripts genereren om standaardbeperkingen toe te voegen aan kolommen in meerdere tabellen in SQL Server-database


  1. Conversie mislukt bij het converteren van de varchar-waarde 'simple' naar gegevenstype int

  2. Replicatieoplossingen van Oracle en MySQL vergelijken

  3. Gebruik FILE_IDEX() om de ID van een databasebestand in SQL Server te retourneren

  4. Bulk Collect-clausule gebruiken met SELECT INTO-instructie in Oracle Database?