Pergunta

Eu estou tentando consulta para uma lista de definições procedimento armazenado usando information_schema.routines que existem em um banco de dados, mas não em outro.

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


Isso me dá as definições de consulta em uma única linha, então quando eu tiver um comentário como este

--Some comment
SELECT Column
FROM Somewhere

O SQL fica comentada e eu não posso usar a definição para criar o SP.

Como eu analisar esta de volta com as quebras de linha apropriada?
ou
Existe uma maneira melhor para obter esses scripts (usando o código)?

Foi útil?

Solução

O procedimento armazenado só é exibido em uma única linha no Management Studio. Se você executar a consulta com os resultados de texto, ou usar o seguinte, você vai ter as quebras de linha correta:

declare @sql varchar(8000) -- varchar(max) in SQL 2005+

SELECT 
        @sql = t1.Routine_Definition
FROM
        INFORMATION_SCHEMA.Routines t1 

print @sql

Outras dicas

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

Aqui está como eu implementou a solução de ck ...

o ponto de vista INFORMATION_SCHEMA retorna apenas os primeiros 4000 caracteres na definição. (Idealmente, você não terá SP que são tanto tempo) Você vai querer roteiro aqueles manualmente ou alguma outra forma.

Eu acho que a maneira mais fácil de obter os procedimentos armazenados é usar o utilitário de importação / exportação que está embutido no SQL Server Management Studio. De lá você pode exportar o seu procedimento armazenado objetos na janela de código ou para um arquivo que você pode imediatamente rodar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top