Я использую SQL Server 2008 и хочу скопировать хранимые процедуры из одной базы данных в другую. Как?
Щелкните правой кнопкой мыши SP под БД и выберите «Сохраненная процедура сценария как> СОЗДАТЬ в> Файл», он создаст файл сценария SQL, а затем запустит этот сценарий в другой базе данных.
Просто используйте Management Studio для создания сценария для хранимых процедур, сохраните сценарий в файл, а затем запустите его на другом сервере SQL.
По памяти вы щелкаете правой кнопкой мыши базу данных и в разделе «Все задачи» выберите «Создать сценарии» или что-то в этом роде. Это создаст Transact-SQL для создания того, что вы выберете.
JR
Вот запрос (установите вывод в текст) для возврата хранимых процедур:
SELECT ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE='PROCEDURE'
В SSMS есть параметры, позволяющие генерировать разрешения для пользователей - это удобно.
Инструменты> параметры> сценарии
Вы также можете создать несколько сценариев, щелкнув «хранимые процедуры» на панели «Обозреватель объектов», а затем выбрав несколько процедур в окне «Сведения» обозревателя объектов. Щелкните правой кнопкой мыши выбранные процедуры, и вы готовы к работе.
Я предпочитаю Redgate SQL Compare.
Все ответы выше хороши и будут работать. Проблема в том (во всяком случае, в моем мире): где ваши спроки?
В моем случае у нас есть один набор sprocs в базе данных приложения (бизнес-логика и т. Д.), А другой набор sproc управления системой в master.
Кикер для меня - перемещать (и синхронизировать) sprocs в главном ....
Вы можете скопировать всю базу данных, включая хранимые процедуры, возможно, это то, что вам нужно:
В Ms SQL Server Managment studio -> Щелкните правой кнопкой мыши по исходной базе данных, перейдите в меню «Задачи» и выберите «Копировать базу данных».
Это создаст полную копию исходного кода, включая таблицы, данные и сохраненные процедуры.
У @Ash Machine есть хорошая идея, но он использует неправильный запрос, который ограничивает возвращаемый результат nvarchar (4000).
Используйте вместо
Select definition from sys.sql_modules where object_id = object_id('<procname>')
и вы получите полное неусеченное определение.
В большинстве практических случаев это работает в графических интерфейсах, таких как SSMS, когда вы используете вывод в текст и устанавливаете максимальное количество символов в столбце pro равным 8192. Если некоторые строки шире 8192, это не удается. Но обратите внимание, что это ограничение инструмента запроса, а не самого запроса. Это ограничение проникло и в SQLServer 2012.
Используя ADO.NET, возможно, через PowerShell, как в SQLPSX sqlise вы можете получить полное определение.
Если вы хотите хранить только резервные копии определения процедуры в некоторой таблице той же базы данных, это тоже работает.