Exporter le code de vues, procédures stockées, triggers, fonctions SQL vers un fichier

Pour effectuer une revue de code ou pour gérer des versions de code en phase de développement, il peut être intéressant d’exporter les codes des modules SQL vers un fichier.
Voyons comment réaliser cela, à l’aide de l’utilitaire en ligne de commande BCP …

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
--------------------------------------------------------------------------------------
-- Nicolas SOUQUET - 25/06/2009 - Exporter le code de modules dans un fichier unique -
--------------------------------------------------------------------------------------
SELECT SQL.definition + CHAR(10) + CHAR(13) + 'GO' AS CodeModule
INTO ##MODULES
FROM sys.objects AS OBJETS
JOIN sys.sql_modules AS SQL ON SQL.object_id = OBJETS.object_id
WHERE OBJETS.type IN ('P', 'V', 'TR', 'FN', 'IF', 'TF')
AND OBJETS.name NOT LIKE 'dt%' AND OBJETS.name NOT LIKE 'sp%'
ORDER BY OBJETS.object_id
 
DECLARE @szBCP VARCHAR(256);
SET @szBCP = 'bcp "SELECT CodeModule FROM ##MODULES" queryout C:\ModulesSQL.sql -T -c';
EXEC master.dbo.xp_cmdshell @szBCP;
 
DROP TABLE ##MODULES;
 
----------------------------------------------------------------------------------------------------
-- Nicolas SOUQUET - 25/06/2009 - Exporter le code de plusieurs modules avec un fichier par module -
----------------------------------------------------------------------------------------------------
-->>>> A EXECUTER DANS LE CONTEXTE DE LA BD DEPUIS LAQUELLE ON SOUHAITE RÉALISER L'EXPORT
SET NOCOUNT ON
 
DECLARE CUR_MODULES CURSOR FOR
  SELECT name
  FROM sys.objects
  WHERE type IN ('P', 'V', 'TR', 'FN', 'IF', 'TF')
  -- AND name LIKE '%blablabla%'
FOR READ ONLY
 
DECLARE @szNomModule SYSNAME
OPEN CUR_MODULES
FETCH NEXT FROM CUR_MODULES INTO @szNomModule
WHILE @@FETCH_STATUS = 0
BEGIN
  SELECT definition
  INTO ##MODULE_TEXT
  FROM sys.sql_modules
  WHERE OBJECT_NAME(object_id) = @szNomModule
 
  DECLARE @szBCP VARCHAR(512);
  SET @szBCP = 'bcp "SELECT definition FROM ##PROC_TEXT" queryout C:\' + @szNomModule + '.sql -T -c';
  EXEC master.dbo.xp_cmdshell @szBCP, NO_OUTPUT
 
  DROP TABLE ##MODULE_TEXT;
  FETCH NEXT FROM CUR_MODULES INTO @szNomModule
END
DEALLOCATE CUR_MODULES

ElSuket

Laisser un commentaire