MSSQL:Как вы создаете сценарий создания Хранимой процедуры с помощью кода?
-
21-08-2019 - |
Вопрос
Я пытаюсь запросить список определений хранимых процедур, используя 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.Оттуда вы можете экспортировать объекты вашей Хранимой процедуры в окно кода или в файл, который вы можете немедленно запустить.