MSSQL:Как вы создаете сценарий создания Хранимой процедуры с помощью кода?

StackOverflow https://stackoverflow.com/questions/513158

Вопрос

Я пытаюсь запросить список определений хранимых процедур, используя information_schema.routines, которые существуют в одной базе данных, но не в другой.

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


Это дает мне определения запросов в одной строке, поэтому, когда у меня есть такой комментарий

--Some comment
SELECT Column
FROM Somewhere

SQL закомментирован, и я не могу использовать определение для создания SP.

Как мне разобрать это обратно с соответствующими разрывами строк?
или
Есть ли лучший способ получить эти скрипты (используя код)?

Это было полезно?

Решение

Хранимая процедура отображается только в одной строке в Management Studio.Если вы запустите запрос с результатами в текст, или используйте следующее, вы получите правильные разрывы строк:

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

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

print @sql

Другие советы

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

Вот как я реализовал решение ck...

представление INFORMATION_SCHEMA возвращает только первые 4000 символов в определении.(В идеале у вас не будет SP такой длины) Вы захотите написать их вручную или каким-либо другим способом.

Я думаю, что самый простой способ получить ваши хранимые процедуры - это использовать утилиту импорта / экспорта, встроенную в SQL Server Management Studio.Оттуда вы можете экспортировать объекты вашей Хранимой процедуры в окно кода или в файл, который вы можете немедленно запустить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top