MSSQL: Как вы создаете сценарий создания хранимой процедуры с помощью кода? - PullRequest
4 голосов
/ 04 февраля 2009

Я пытаюсь запросить список определений хранимых процедур, используя подпрограммы 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.

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

Ответы [ 3 ]

9 голосов
/ 04 февраля 2009

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

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

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

print @sql
1 голос
/ 04 февраля 2009
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 такого длинного размера). Вы захотите написать сценарий вручную или каким-либо другим способом.

0 голосов
/ 04 февраля 2009

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

...