Как сохранить хранимую процедуру в файл

Обновлено: 06.07.2024

Я хотел бы сохранить мои MS SQL Server 2005 хранимые процедуры в .sql файлов автоматически (предпочел бы инструмент, который я могу вызвать через .bat), так что мне не нужно нажимать каждый отдельный sproc вручную и сохранять его.

Я уже нашел SMOscript из devio IT, но он собирает все таблицы и sproc, что занимает некоторое время. Есть ли какой-нибудь подобный инструмент, где я могу определить, какие sproc(ы) экспортировать? Кроме того, мне не хватает предложения USE, которое SMOScript не добавляет к экспортируемому файлу в отличие от ручного экспорта в виде скрипта sproc для CREATE.

с наилучшими пожеланиями Шон

Я работаю над SQL Azure и написал в нем несколько хранимых процедур. Теперь, выполняя эту хранимую процедуру с помощью запроса EXEC из базы данных, мне нужно отладить ее, чтобы найти ошибку, если таковая имеется. Есть ли способ сделать это в SQL Azure? Примечание: - Я использую SQl Azure на SQL.

Я создал несколько хранимых процедур в phpmyadmin, как можно вызвать их с помощью запроса sql (mysql)?

Создайте batch file со скриптом (извините за форматирование, но он действительно должен быть встроенным для выполнения пакета):

Назовите его "run.bat". Теперь для выполнения пакета используйте параметры:
run.bat [имя пользователя] [пароль] [имя сервера] [база данных]
на примере:
run.bat sa pwd111 localhost\SQLEXPRESS master
сначала все имена хранимых процедур будут сохранены в файле sp_list.txt, а затем по одному в отдельных файлах сценариев. Единственная проблема - последняя строка каждого скрипта с подсчетом результатов - я работаю над этим :)

отредактировано : исправлена ошибка в запросе

Удаление строки "Rows affected"
Хорошо, теперь нам нужно создать еще одну партию:

Назовите его "line_del.bat". Смотрите, первый параметр-это файл для обработки, 2-я строка для поиска строк для удаления. Теперь измените основной пакет (опять же, извините за форматирование):

:) вы можете заметить, что последние два из SO!

В SQL Server Management Studio есть альтернатива-создание сценариев для базы данных.

Разверните представление Объект Explorer, чтобы найти базу данных, щелкните правой кнопкой мыши и выберите "Tasks : Generate Scripts"

Оттуда вы можете написать сценарий для всех объектов, просто сохраненных предварительных настроек, всего, что находится между ними. На одной странице есть довольно много вариантов, хотя основной, который я меняю, - это: - "Include IF NOT EXISTS"

Сделав этот параметр "FALSE", вы просто получите целый список операторов CREATE.

Затем вы можете выбрать, чтобы записать объекты в новое окно запроса или в файл.

У меня есть около 100 файлов хранимых процедур, которые я хочу добавить в новую базу данных, которую я создал. Есть ли какой-нибудь способ просто бросить их в папку, чтобы импортировать? Когда я попробовал это сделать, например, как вы сделали бы с windows explorer, он просто открыл их все в.

Примечание: Я не спрашиваю о полном контроле версий. Есть ли какой-нибудь способ автоматически хранить историю хранимых процедур на SQL Server. Аналогично тому, как Google Docs автоматически хранит историю версий документов, а Википедия автоматически хранит историю версий статей. Я не хочу, чтобы.

Добавление SET NOCOUNT ON действительно устранило необходимость в line_del.bat, но замена syscomments на sys.sql_modules привела к тому, что каждая хранимая процедура была усечена до 258 символов. Поэтому для достижения наилучших результатов код, который я использовал, был:

Который работал и не нуждался в использовании line_del.bat. Чего я не получил, когда выполнял ручной экспорт с помощью скриптов SSMS wizard (Tasks/Generate/Хранимых процедур/Select All), так это:

в начале каждой команды .sql, а также команды trailing GO. Не невероятно важно, но кое-что стоит отметить. Спасибо Максу Гонтару, Шонсилверу и Ли за ваш вклад! Теперь я могу автоматизировать резервное копирование хранимых процедур в базе данных и применить контроль версий.

Я добавил SET NOCOUNT ON, чтобы устранить необходимость в line_del.bat. Также заменил syscomments на sys.sql_modules (SQL 2005). Я также мог бы использовать функцию OBJECT_DEFINITION, но она была медленнее, чем sys.sql_modules.

Некоторое время назад я хотел сделать то же самое, и в итоге я сделал это, сделав небольшую vbscript.

Я использовал sqlcmd и-E вместо user, pass. Пока это работает нормально, просто хранимые процедуры длиной более 4000 символов будут иметь разрыв строки

с наилучшими пожеланиями , Шон

Спасибо всем вышеперечисленным за помощь и оставляю это здесь для других нубов sqlcmd, таких как я, чтобы найти. Работает на sql server 2005. objectName-это имя процедуры, представления и т. Д.

Похожие вопросы:

Кто-нибудь знает способ доступа к тексту хранимых процедур с помощью LINQ-SQL? Я хотел бы провести аудит набора хранимых процедур, чтобы убедиться, что все они содержат какой-то общий код. Мне.

У нас есть много хранимых процедур, которые все содержат много комментариев. Есть ли способ извлечь комментарии из хранимых процедур для deployment, чтобы пользователи не могли их видеть при.

Я только начинаю использовать корпоративную версию SQL Server 2014. Я совершенно новичок в Integration Services и должен использовать его для асинхронного вызова хранимых процедур. Отличается ли.

Я работаю над SQL Azure и написал в нем несколько хранимых процедур. Теперь, выполняя эту хранимую процедуру с помощью запроса EXEC из базы данных, мне нужно отладить ее, чтобы найти ошибку, если.

Я создал несколько хранимых процедур в phpmyadmin, как можно вызвать их с помощью запроса sql (mysql)?

У меня есть около 100 файлов хранимых процедур, которые я хочу добавить в новую базу данных, которую я создал. Есть ли какой-нибудь способ просто бросить их в папку, чтобы импортировать? Когда я.

Примечание: Я не спрашиваю о полном контроле версий. Есть ли какой-нибудь способ автоматически хранить историю хранимых процедур на SQL Server. Аналогично тому, как Google Docs автоматически хранит.

С помощью .sql вы можете запускать запросы из нескольких файлов .sql , используя такой язык: @query.sql Как вы можете сделать то же самое с Oracle? Я хотел бы скомпилировать 5 хранимых процедур из 5.

У меня есть служба wcf, которая имеет методы, выполняющие операции вставки/обновления в БД SQL с помощью хранимых процедур. Если я включу транзакции для службы wcf и вызову 2 метода от моего.

Могу ли я получить примеры использования встроенных файлов sql для хранимых процедур? Следует использовать sql внедренные файлы в список с . синтаксис набора. Я пробовал искать в документах , и.

Сегодня в материале мы с Вами рассмотрим несколько способов реализации того, как можно в Microsoft SQL Server сохранить результат выполнения хранимой процедуры в таблице в тех случаях, когда процедура возвращает табличные данные.

сохранить результат хранимой процедуры

Это Вам может потребоваться, например, тогда когда нет возможности изменить код процедуры таким образом, чтобы непосредственно в самой процедуре осуществлялась вставка (INSERT) данных, которые она возвращает, в нужную таблицу.

Если у Вас встала подобная задача сразу скажу, что универсального способа я не нашел, каждый из перечисленных способов ниже имеет свои недостатки, иными словами, какой использовать решать Вам.

Для начала давайте создадим тестовую хранимую процедуру, которая будет возвращать табличные данные. Все действия ниже я буду выполнять на Microsoft SQL Server 2016 Express, на текущий момент вышла уже 2017 версия SQL Server, о том, что нового в ней появилось, можете почитать в материале – «Обзор основных нововведений в Microsoft SQL Server 2017».

Создание хранимой процедуры, которая возвращает табличные данные

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

Скриншот 1

Как видите, процедура создана и возвращает табличные данные.

Способ 1 – Используем вызов процедуры в конструкции INSERT INTO

Инструкция INSERT позволяет в качестве источника указывать вызов хранимой процедуры, но у данного способа есть один очень существенный недостаток, таблица, в которую Вы хотите сохранить данные, должна уже существовать, т.е. Вы заранее должны знать количество и тип данных возвращающихся столбцов, для того чтобы создать соответствующую таблицу.

В следующем примере мы создадим временную таблицу, выполним инструкцию INSERT, в которой в качестве источника будет выступать вызов хранимой процедуры.

Скриншот 2

Способ 2 – Используем связанный сервер

В данном случае мы создаем связанный сервер, который будет ссылаться на самого себя, иными словами, на текущий сервер. Затем с помощью конструкции OPENQUERY мы обращаемся к связанному серверу, запуская на нем соответствующую процедуру. Результат в данном случае мы можем сохранять уже с помощью конструкции SELECT INTO в новую таблицу (в нашем случае для примера во временную таблицу).

Скриншот 3

Плюс данного способа в том, что Вам уже не нужно заранее создавать таблицу и соответственно знать количество столбцов. Но, как Вы понимаете, у данного способа есть и недостатки, например, Вы должны для выполнения таких процедур предварительно создать связанный сервер, также данный способ не будет работать, если табличные данные не имеют названия колонок (например, SELECT 1, 2, 3) и если в хранимой процедуре используются временные таблицы.

Способ 3 – Используем конструкцию OPENROWSET

Этот способ подразумевает использование функции OPENROWSET и поставщика OLE DB. Для использования данного способа у Вас должен быть включен параметр Ad Hoc Distributed Queries.

Скриншот 4

Плюс этого способа в том, что Вам уже не нужно предварительно создавать ни таблицу, ни связанный сервер. Но, минусы все равное есть, конструкцию использовать не получится, если в хранимой процедуре используются временные таблицы или есть неименованные столбцы, и, как я уже сказал, предварительно нужно включить параметр «Ad Hoc Distributed Queries».

Заметка! Если Вас интересует SQL и T-SQL, рекомендую посмотреть мои видеокурсы по T-SQL, с помощью которых Вы «с нуля» научитесь работать с SQL и программировать с использованием языка T-SQL в Microsoft SQL Server.

Читайте также: