Dit artikel geeft een beschrijving hoe je een Microsoft SQL Server database kunt scripten. Dit script bevat de complete databasestructuur en alle objecten binnen de database zoals functies en Stored Procedures.
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).