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

Откуда: из леса
Сообщений: 14
Задача: из базы Old (пусть, будет SQL 2008) перенести пару десятков хранимых процедур в идентичную базу New (скажем, SQL 2005).
Естественно хочется все сделать программно, без участия "мышки" , так сказать.

Для решения задачи делаю следующее:

1. Создал на целевом сервере с базой New линк с серверу с базой Old.
2. Получил ХП запросом:
SET QUOTED_IDENTIFIER OFF
GO
declare @query varchar(max)

select com.text
	from [sql2008].[Old].sys.syscomments com
	join [sql2008].[Old].sys.objects o
		on o.object_id = com.id
	where o.object_id = 4963144
order	by com.colid	

select @query = ''
select @query = @query + com.text
	from [sql2008].[Old].sys.syscomments com
	join [sql2008].[Old].sys.objects o
		on o.object_id = com.id
	where o.object_id=4963144 
order	by com.colid	

exec (@query)


И вроде все работает, но если выгрузить ХП мышкой, то в шапке запроса будут параметры
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO


А в моем случае этой шапки нет. Если добавить установку ANSI_NULLS OFF в запрос, то выдает ошибку
Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query.


Можно как то победить? или я вообще не правильно копаю?

p. s. если кто-то считает, что в переменной @qury окажется не больше 8000 символов, я Вас огорчу, в конкретном этом случае у меня len(@query) выдает 8803 и в exec вставляет все полностью.
4 июн 14, 17:59    [16121453]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
vuttol
И вроде все работает, но если выгрузить ХП мышкой, то в шапке запроса будут параметры
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
Студия смотрит, с какими настройками была создана процедура, и добавляет соответствующие команды в скрипт создания ХП.
vuttol
А в моем случае этой шапки нет. Если добавить установку ANSI_NULLS OFF в запрос
А в запрос-то зачем?
4 июн 14, 18:19    [16121610]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
SSIS не хотите воспользоваться? Transfer Database Task

Или сделать Generate Scripts?
4 июн 14, 18:45    [16121785]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8834
автор
Естественно хочется все сделать программно, без участия "мышки" , так сказать.


Что же в этом естественного? Естественно правильно использовать инструменты, а не играть на тазиках. SSMS же имеет прекрасные инструменты скриптования и импорта-экспорта.
5 июн 14, 00:44    [16123338]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
vuttol,

Вы тута вона скока букав понаписали. Не только мыша, но и клаву задействовали :)
5 июн 14, 01:29    [16123486]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
vuttol
Member

Откуда: из леса
Сообщений: 14
baracs

vuttol
И вроде все работает, но если выгрузить ХП мышкой, то в шапке запроса будут параметры
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO

Студия смотрит, с какими настройками была создана процедура, и добавляет соответствующие команды в скрипт создания ХП.


Это понятно, что студия воспроизводит так как было. Вот и я максимального совпадения хочу. Не исключено, что ANSI_NULL OFF принципиально важен (Может это не так? Я слабо разбираюсь в вопросе, просветите меня если я ошибаюсь.).

a_voronin
SSIS не хотите воспользоваться? Transfer Database Task

Или сделать Generate Scripts?


Не сталкивался еще с SSIS, почитаю, посмотрю, спасибо.


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


Что же в этом естественного? Естественно правильно использовать инструменты, а не играть на тазиках. SSMS же имеет прекрасные инструменты скриптования и импорта-экспорта.


И что же мне теперь этими инструментами раз в неделю в ручную пользоваться??? а если я хочу на десяток другой Баз такой скрипт повесить в качестве плановой работы?
5 июн 14, 09:30    [16123929]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Вообще-то нужно так :

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
5 июн 14, 09:56    [16124068]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
vuttol
Member

Откуда: из леса
Сообщений: 14
Winnipuh
Вообще-то нужно так :

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


А можно узнать почему вы так решили?
5 июн 14, 10:10    [16124118]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
vuttol
Winnipuh
Вообще-то нужно так :

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


А можно узнать почему вы так решили?


не мы такие, жизнь такая (ц)

In a future version of SQL Server, ANSI_NULLS will always be ON and any applications that explicitly set the option to OFF will generate an error. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.
5 июн 14, 10:16    [16124148]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
vuttol
Member

Откуда: из леса
Сообщений: 14
Winnipuh
vuttol
пропущено...


А можно узнать почему вы так решили?


не мы такие, жизнь такая (ц)

In a future version of SQL Server, ANSI_NULLS will always be ON and any applications that explicitly set the option to OFF will generate an error. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.


Обещают уже давно, но справке на MSDN в SQL Srver 2014 все еще работает. Не отрицаю, что возможно придется переделывать этот момент, но сейчас стоимость исправлений будет неоправданно велика.
5 июн 14, 10:33    [16124242]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
vuttol
А можно узнать почему вы так решили?
Установки ansi_nulls и quoted_identifier хранятся для каждой процедуры и действуют при их выполнении. Изменить их внутри процедуры в рантайме нельзя.
Поэтому данные установки и необходимо включать в скрипт каждой процедуры.
5 июн 14, 10:45    [16124308]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
vuttol
Member

Откуда: из леса
Сообщений: 14
invm
vuttol
А можно узнать почему вы так решили?
Установки ansi_nulls и quoted_identifier хранятся для каждой процедуры и действуют при их выполнении. Изменить их внутри процедуры в рантайме нельзя.
Поэтому данные установки и необходимо включать в скрипт каждой процедуры.


Почему то мне кажется, что вы просто решили по-умничать и выдернули фразу не в даваясь в контекст
5 июн 14, 10:49    [16124335]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
vuttol,

Если вас не устраивают объяснения, можете самостоятельно ознакомиться с ними в документации.
5 июн 14, 11:14    [16124468]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8834
vuttol,
автор
И что же мне теперь этими инструментами раз в неделю в ручную пользоваться??? а если я хочу на десяток другой Баз такой скрипт повесить в качестве плановой работы?

Нет ничего проще - сохраните полученный скрипт в виде файла и выполняйте сколько угодно раз.
5 июн 14, 11:29    [16124605]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
vuttol
Member

Откуда: из леса
Сообщений: 14
invm,

меня устраивает объяснение, меня не устраивает, то что вы ответили на вопрос который не задавался. Если бы эти параметры не надо было задавать предварительно, а можно было изменять их внутри процедуры, то этого топика бы не было.
5 июн 14, 11:32    [16124648]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
vuttol
Если бы эти параметры не надо было задавать предварительно, а можно было изменять их внутри процедуры, то этого топика бы не было.
Если бы вы понимали почему эти установки необходимо задавать предварительно, то топика тоже бы, наверное, не было.
5 июн 14, 11:39    [16124695]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
vuttol
Member

Откуда: из леса
Сообщений: 14
Решил ситуацию следующим образом
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

select com.definition
    into #TmpTbl
	from [sql2008].[Old].[sys].[sql_modules] com	
	where com.object_id=4963144 
order	by com.colid	

SET ANSI_NULLS OFF
GO

declare @query varchar(max)
select @query = definition from #TmpTbl
exec(@query)


Для удобства взял другое представление (slq_modules) в поле definition уже хранится собранная строка, всем спасибо за советы.
5 июн 14, 11:42    [16124725]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
ТС так ничего и не понял. Ну да это его проблемы...
5 июн 14, 12:00    [16124898]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
vuttol
baracs
Студия смотрит, с какими настройками была создана процедура, и добавляет соответствующие команды в скрипт создания ХП.
Это понятно, что студия воспроизводит так как было. Вот и я максимального совпадения хочу.
Но как-то странно этого добиваетесь. Вы разницу между скриптом создания ХП и свои запросом по вытягиванию этих скриптов из БД улавливаете?
baracs
Не исключено, что ANSI_NULL OFF принципиально важен (Может это не так? Я слабо разбираюсь в вопросе, просветите меня если я ошибаюсь.).
Так залезте в доку и решите, важен или нет.
5 июн 14, 12:23    [16125100]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
vuttol
Winnipuh
пропущено...


не мы такие, жизнь такая (ц)

In a future version of SQL Server, ANSI_NULLS will always be ON and any applications that explicitly set the option to OFF will generate an error. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.


Обещают уже давно, но справке на MSDN в SQL Srver 2014 все еще работает. Не отрицаю, что возможно придется переделывать этот момент, но сейчас стоимость исправлений будет неоправданно велика.


это уже нужно делать, т.е. ON, в 2012.

Впрочем, если "всё еще работает" для вас означает, что, не понимая зачем, но надо использовать OFF - ваша база вам и решать
5 июн 14, 12:40    [16125277]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
vuttol
Member

Откуда: из леса
Сообщений: 14
baracs
vuttol
пропущено...
Это понятно, что студия воспроизводит так как было. Вот и я максимального совпадения хочу.

Но как-то странно этого добиваетесь. Вы разницу между скриптом создания ХП и свои запросом по вытягиванию этих скриптов из БД улавливаете?

Нет, можете пояснить?
baracs
baracs
Не исключено, что ANSI_NULL OFF принципиально важен (Может это не так? Я слабо разбираюсь в вопросе, просветите меня если я ошибаюсь.).
Так залезте в доку и решите, важен или нет.


Winnipuh
vuttol
Winnipuh
пропущено...


не мы такие, жизнь такая (ц)

In a future version of SQL Server, ANSI_NULLS will always be ON and any applications that explicitly set the option to OFF will generate an error. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.


Обещают уже давно, но справке на MSDN в SQL Srver 2014 все еще работает. Не отрицаю, что возможно придется переделывать этот момент, но сейчас стоимость исправлений будет неоправданно велика.


это уже нужно делать, т.е. ON, в 2012.

Впрочем, если "всё еще работает" для вас означает, что, не понимая зачем, но надо использовать OFF - ваша база вам и решать


Тут как говориться - не я решаю, я ответственный за левый рукав, воротник шьет кто-то третий. К сведению принял.
5 июн 14, 13:15    [16125604]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
vuttol
baracs
Вы разницу между скриптом создания ХП и свои запросом по вытягиванию этих скриптов из БД улавливаете?

Нет, можете пояснить?
Как влияют SET-ы при выполнении вашего запроса, на выполенние содержимого переменной @query?
5 июн 14, 13:46    [16125846]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
vuttol
Member

Откуда: из леса
Сообщений: 14
baracs,

Да, я устанавливаю параметры, определяю, переменную, получаю в переменную запрос и затем выполняю его. В запрос подставляются текущие параметры и я получаю точно такой же объект, каким был исходный. Разве нет?
5 июн 14, 13:54    [16125937]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
vuttol
В запрос подставляются текущие параметры и я получаю точно такой же объект, каким был исходный. Разве нет?
Свои скриптом вы получаете объект с ansi_nulls и quoted_identifier off. Какие были установки этих опций у исходного объекта вы не учитываете. Так что об идентичности объектов говорить нельзя.
5 июн 14, 14:25    [16126195]     Ответить | Цитировать Сообщить модератору
 Re: Перенос Хранимых процедур  [new]
vuttol
Member

Откуда: из леса
Сообщений: 14
invm,

вы правы, в конкретном примере я не учитываю какой именно параметр был установлен и беру за истину ansi_nulls off.
Для того чтобы сказать о достоверности параметра, нужно смотреть поле uses_ansi_nulls в представлении sys.sql_modules.
Для параметра QUOTED_IDENTIFIER служит поле uses_quoted_identifier.

В реальном запросе, я сортирую эти случаи и выполняю с соответствующим набором параметров.
5 июн 14, 14:40    [16126336]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить