Scénář:
Pracujete jako SQL Server Developer, vaše společnost má databázi se spoustou tabulek. Každá tabulka má nějaké sloupce auditu, jako je CreatedOn, CreatedBy. Nikdy na nich nebyly vytvořeny žádné výchozí omezení. Chcete vytvořit výchozí omezení ve sloupci CreatedOn pro všechny tabulky s hodnotou getdate(), také chcete vytvořit výchozí omezení pro CreatedBy=SUSER_SNAME(). Možná máte jiný sloupec typu string a chtěli byste generovat skripty pro to taky.Řešení:
Níže uvedený skript lze použít ke generování výchozího omezení pro daný sloupec v celé databázi pro všechny tabulky. Název výchozího omezení bude DF_SchemaName_TableName_ColumnName.Pojďme vygenerovat skripty výchozího omezení pro sloupec CreatedOn s hodnotou Getdate() pomocí níže uvedeného skriptu.
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
Generování skriptů pro přidání výchozího omezení do sloupce v databázi na SQL Server |
Musíte pouze změnit proměnné @ColumnName a @DefaultValue podle vašich požadavků. Stejný skript použijeme k přidání výchozího omezení do sloupce CreatedBy s hodnotou=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
Jak vygenerovat skript pro přidání výchozího omezení do sloupce v databázi SQL Server |
Nyní uvažme, že chcete nastavit výchozí hodnotu na nějakou řetězcovou hodnotu, protože chceme vytvořit Výchozí omezení pro sloupec regionu='USA' , Když nastavíte hodnotu proměnné @DefaultValue, přidejte jednoduché uvozovky, jak je uvedeno níže.
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
Jak vygenerovat skripty pro přidání výchozího omezení do sloupce ve více tabulkách v databázi SQL Server |
Video ukázka:Generování skriptů pro přidání výchozího omezení do sloupce ve více tabulkách v databázi SQL Server