Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как правильно исполнить скрипт, который хранится в varbinary?  [new]
Трость
Guest
Добры день.

Необходимо периодически исполнять скрипты (файл формата script.sql), которых хранятся в таблице как varbinary.

Сам script.sql может занимать пару метров, по большому счёту много Insert по разным таблицам.

Появилась мысль вызвать скрипт динамически:
declare @sql varchar(max)

set @sql =
...
...

exec(@sql)


но тут момент, varchar может быть максимум 8000, а сам скрипт хранящейся в varbinary более 8000.

Вопрос в том как этот скрипт можно выполнить через TSQL?
6 окт 15, 16:05    [18242106]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно исполнить скрипт, который хранится в varbinary?  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Трость,

varchar(max) имеет размер 2Гб
https://msdn.microsoft.com/ru-ru/library/ms176089(v=sql.120).aspx
6 окт 15, 16:21    [18242200]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно исполнить скрипт, который хранится в varbinary?  [new]
_djХомяГ
Guest
Также необходимо явно приводить составляющие к varchar(max)
Динамический запрос VARCHAR(MAX)
6 окт 15, 16:31    [18242272]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно исполнить скрипт, который хранится в varbinary?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Трость
Вопрос в том как этот скрипт можно выполнить через TSQL?


Ради спорта, что ли? Напишите приложение, которое будет выполнять скрипты. С обработкой ошибок, журналом и т.д.
6 окт 15, 16:47    [18242447]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно исполнить скрипт, который хранится в varbinary?  [new]
Трость
Guest
Спасибо всем! Данные читаю корректно...

Появился ещё момент. Каждый отдельный скрипт разделяется "GO" из-за этого выполнение слетает с ошибкой

т.е. этот код не работает

DECLARE @S NVARCHAR(MAX)
SET @S = 'INSERT INTO [IM] ([Vion]) VALUES (29) GO  INSERT INTO [IM] ([Vion]) VALUES (30) GO'

EXEC sp_executesql @S


а, если так, то работает

DECLARE @S NVARCHAR(MAX)
SET @S = 'INSERT INTO [IM] ([Vion]) VALUES (29)  INSERT INTO [IM] ([Vion]) VALUES (30)'

EXEC sp_executesql @S


Хотел поинтересоваться, пакетное выполнение через sp_executesql не работает?
Можно ли что-то с этим сделать?
7 окт 15, 09:40    [18244931]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно исполнить скрипт, который хранится в varbinary?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Трость
Каждый отдельный скрипт разделяется "GO" из-за этого выполнение слетает с ошибкой

Потому что в TSQL нет команды GO
7 окт 15, 09:42    [18244939]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно исполнить скрипт, который хранится в varbinary?  [new]
Трость
Guest
Glory,
Спасибо...

полюбопытствую, а как это работает в ManagementStudio?
7 окт 15, 09:51    [18244978]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно исполнить скрипт, который хранится в varbinary?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Трость
а как это работает в ManagementStudio?

ManagementStudio - это не сервер
И если вы бы читали хелп, то узнали бы

GO is not a Transact-SQL statement; it is a command recognized by the sqlcmd and osql utilities and SQL Server Management Studio Code editor.

SQL Server utilities interpret GO as a signal that they should send the current batch of Transact-SQL statements to an instance of SQL Server. The current batch of statements is composed of all statements entered since the last GO, or since the start of the ad hoc session or script if this is the first GO.
7 окт 15, 09:53    [18244987]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно исполнить скрипт, который хранится в varbinary?  [new]
Трость
Guest
Glory,

Ещё раз спасибо, за пояснение.


Если в переменной хранится динамические запросы, которые должны быть установлены один за другим, то как его выполнить через sp_executesql?
7 окт 15, 11:33    [18245518]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно исполнить скрипт, который хранится в varbinary?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Трость
Если в переменной хранится динамические запросы, которые должны быть установлены один за другим, то как его выполнить через sp_executesql?

А почему их нужно выполнять по отдельности ?
7 окт 15, 11:36    [18245540]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно исполнить скрипт, который хранится в varbinary?  [new]
o-o
Guest
наверное там имеются create schema/create view.
----------
распарсить по разделителю go,
сложить в таблицу,
выполнять в курсоре, вычитывая куски по очереди
7 окт 15, 11:43    [18245577]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно исполнить скрипт, который хранится в varbinary?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
В тексте динамического запроса ведь может быть и выполнение динамического запроса.
Вместо разделения на пакеты.
Однако, в данном конкретном случае совершенно непонятно,
зачем данные вставляются отдельными INSERTами?
Почему не
INSERT [IM]([Vion]) VALUES(29),(30)
?
Версия не позволяет?
7 окт 15, 11:51    [18245622]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно исполнить скрипт, который хранится в varbinary?  [new]
o-o
Guest
iap
Однако, в данном конкретном случае совершенно непонятно,
зачем данные вставляются отдельными INSERTами?
Почему не
INSERT [IM]([Vion]) VALUES(29),(30)
?

студией поди сгенерили заполнение всех таблиц в базе через инсерты,
а скорее всего, вообще сделали script database с выгрузкой данных
скрипт в таблицу запихали, теперь страдают, как вынимать.
---
бэкапом надо базы таскать
7 окт 15, 12:02    [18245694]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить