Als je regelmatig mutaties uitvoert op een database is het handig om een back-up te hebben van de structuur van de database en van alle objecten binnen deze database. Onderstaande Stored Procedure kun je hiervoor gebruiken, deze maakt een Database-script aan van de opgegeven database. De naam van het script wordt “Naam_Database_Datum_RandomNummer”.
CREATE PROCEDURE [dbo].[sp_GenDBscript] @vcDatabase as Varchar(50)
AS
DECLARE @vcPath as Varchar(150)
DECLARE @vcCMD as Varchar(150)
DECLARE @vcParam as Varchar(150)
DECLARE @vcTotcmd as Varchar(250)
DECLARE @vcDate as Varchar(10)
DECLARE @vcTextPath as Varchar(150)
DECLARE @vcTextFile as Varchar(150)
DECLARE @vcMkdirStr as Varchar(150)
DECLARE @vcTime as Varchar(150)
DECLARE @iRC as Int
Set @vcTime = REPLACE(Convert(varchar,getdate(), 114),':','')
SET @vcDate = Convert(varchar, getdate(), 112)
SET @vcTextPath = 'E:SQLSCRIPTS' + @vcDatabase
SET @vcTextFile = @vcDatabase + '_' + @vcDate + '_' + @vcTime + '.sql'
SET @vcMkdirStr = 'mkdir ' + @vcTextPath
--checking if dir exist, If it doesnt exist it creates it
EXEC @iRC = master.dbo.xp_cmdshell @vcMkdirStr, NO_OUTPUT
IF @iRC <> 0
BEGIN
exec master.dbo.xp_cmdshell @vcMkdirStr , NO_OUTPUT
END
SET @vcPath = '"C:Program FilesMicrosoft SQL Server90ToolsPublishingSqlPubWiz.exe"'
SET @vcParam = ' script ' + @vcTextPath + '' + @vcTextFile + ' -schemaonly -d ' + @vcDatabase
SET @vcTotcmd = @vcPath + @vcParam
print @vcTotcmd
EXEC master..xp_cmdshell @vcTotcmd
Het script voer je vervolgens uit met deze statement:
EXEC sp_GenDBscript 'AdventureWorks'
Het is nu ook mogelijk om het scripten van de database te schedulen, bijvoorbeeld aan het begin van een ETL-Run. Let even op hard-coded velden in de Stored Procedure (E:SQLSCRIPTS ), dit is de locatie van de output van het script (waar moet hij de file neerzetten).