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)?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top