MSSQL: Comment la création de script CONSERVE Procédure avec le code?
-
21-08-2019 - |
Question
Je suis en train d'interroger une liste de définitions de procédures stockées utilisant information_schema.routines qui existent dans une base de données, mais pas dans un autre.
SELECT
t1.Routine_Definition
FROM
[server1].MyDatabase.INFORMATION_SCHEMA.Routines t1
LEFT JOIN
[server2].MyDatabase.INFORMATION_SCHEMA.Routines t2 ON t1.Routine_Name = t2.Routine_Name
WHERE
t2.Routine_Name is null
Cela me donne les définitions de requête dans une seule ligne quand j'ai un commentaire comme celui-ci
--Some comment
SELECT Column
FROM Somewhere
Le SQL se commenté et je ne peux pas utiliser la définition pour créer la SP.
Comment je parse ce retour avec les sauts de ligne appropriés?
ou
Y at-il une meilleure façon d'obtenir ces scripts (en utilisant le code)?
La solution
La procédure stockée est uniquement affichée sur une ligne dans Management Studio. Si vous exécutez la requête avec des résultats au texte, ou : utilisez ce qui suit, vous obtiendrez la casse ligne correcte:
declare @sql varchar(8000) -- varchar(max) in SQL 2005+
SELECT
@sql = t1.Routine_Definition
FROM
INFORMATION_SCHEMA.Routines t1
print @sql
Autres conseils
DECLARE MY_CURSOR Cursor
FOR
SELECT
t1.Routine_Definition
FROM
[server1].MyDatabase.INFORMATION_SCHEMA.Routines t1
LEFT JOIN
[server2].MyDatabase.INFORMATION_SCHEMA.Routines t2 ON t1.Routine_Name = t2.Routine_Name
WHERE
t2.Routine_Name is null AND
LEN(t1.Routine_Definition) < 4000
Open My_Cursor
DECLARE @sql VARCHAR(MAX)
FETCH NEXT FROM MY_Cursor INTO @sql
While (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
Print @sql
FETCH NEXT FROM MY_CURSOR INTO @sql
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
GO
Voici comment je mis en œuvre la solution de ck ...
la vue INFORMATION_SCHEMA ne retourne que les 4000 premiers caractères dans la définition. (Idéalement, vous avez l'habitude de SP qui sont si longtemps) Vous voulez les scripts manuellement ou d'une autre manière.
Je pense que la meilleure façon d'obtenir vos procédures stockées est d'utiliser l'importation / exportation utilitaire qui est intégrée dans SQL Server Management Studio. De là, vous pouvez exporter vos procédures stockées des objets dans la fenêtre de code ou dans un fichier que vous pouvez exécuter immédiatement.