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