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

Откуда:
Сообщений: 104
Проблема следующая
есть некоторый алгоритм, реализованный в скрипте
для различных версий SQL Server эти реализации разные

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

напрашивается решение проверять версию сервера и далее с помощью IF организовывать
ветвление, но в алгоритмах присутствует GO и такой подход не работает

Кто-нибудь сталкивался с такой проблемой? как решать?
1 июн 09, 15:43    [7251982]     Ответить | Цитировать Сообщить модератору
 Re: организация ветвления с GO  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36805
Проверку надо делать в нужных местах скриптов.
1 июн 09, 15:44    [7251997]     Ответить | Цитировать Сообщить модератору
 Re: организация ветвления с GO  [new]
artii
Member

Откуда:
Сообщений: 104
вариант конечно
но реализации уж сильно разные
много таких проверок будет

хочется один раз где-нить в начале проверить и все

неужели нет такой возможности?
1 июн 09, 15:48    [7252034]     Ответить | Цитировать Сообщить модератору
 Re: организация ветвления с GO  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
как это "в алгоритме встречается GO"?

create procedure Alg_V2000
as begin
...
end
go
create procedure Alg_V2005
as begin
...
end
go

create procedure Alg_all
as begin
 declare @alg sysname
 set @alg = case @@version when '2000' then 'alg_v2000'
           when '2005' then 'alg_v2005'
 end
 exec @alg

end
go

-------------------------
There’s no silver bullet!
1 июн 09, 15:54    [7252097]     Ответить | Цитировать Сообщить модератору
 Re: организация ветвления с GO  [new]
ChA
Member

Откуда: Москва
Сообщений: 10989
locky
create procedure Alg_V2000
as begin
...
end
go
create procedure Alg_V2005
as begin
...
end
go

create procedure Alg_all
as begin
 declare @alg sysname
 set @alg = case @@version when '2000' then 'alg_v2000'
           when '2005' then 'alg_v2005'
 end
 exec @alg

end
go

Вставим в procedure Alg_V2005, например, CTE, и запустим скрипт на SQL2000 ?
1 июн 09, 16:10    [7252229]     Ответить | Цитировать Сообщить модератору
 Re: организация ветвления с GO  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
ChA
Вставим в procedure Alg_V2005, например, CTE, и запустим скрипт на SQL2000 ?

Будет Ж.
1 июн 09, 16:19    [7252288]     Ответить | Цитировать Сообщить модератору
 Re: организация ветвления с GO  [new]
artii
Member

Откуда:
Сообщений: 104
Ж. мне не надо ))))
1 июн 09, 16:30    [7252355]     Ответить | Цитировать Сообщить модератору
 Re: организация ветвления с GO  [new]
ChA
Member

Откуда: Москва
Сообщений: 10989
artii
Ж. мне не надо
Единственный вариант, IMHO, делать через динамический SQL. Но это только ради спортивного интереса. Так что лучше ведите скрипты для разных версий SQL в соответствующих файлах.
1 июн 09, 16:39    [7252412]     Ответить | Цитировать Сообщить модератору
 Re: организация ветвления с GO  [new]
artii
Member

Откуда:
Сообщений: 104
Динамический SQL не пойдет там стоит ограничение на размер строки для varchar это 8 тыс байт
у меня скрипт больше

Ладно надо еще разок подумать, как следует
1 июн 09, 19:01    [7253204]     Ответить | Цитировать Сообщить модератору
 Re: организация ветвления с GO  [new]
ChA
Member

Откуда: Москва
Сообщений: 10989
artii
Динамический SQL не пойдет там стоит ограничение на размер строки для varchar это 8 тыс байт
Или конкатенация практически достаточного для большинства извращений количества локальных переменных, каждая из которых может быть varchar(8000). А если версии не ниже 2005, то и вовсе varchar(max). Не в смысле "рекомендуется к использованию", а просто как факт.
1 июн 09, 19:16    [7253256]     Ответить | Цитировать Сообщить модератору
 Re: организация ветвления с GO  [new]
^^
Guest
а Вы не пробовали скритп разбить на части по 8000 символов а потом запустить все сразу?
DECLARE @scrPart1 VARCHAR (8000)
DECLARE @scrPart2 VARCHAR (8000)
DECLARE @scrPart3 VARCHAR (8000)
DECLARE @scrPart4 VARCHAR (8000)

SET @scrPart1 = '--TSQL Script'
SET @scrPart2 = '--TSQL Script'
SET @scrPart3 = '--TSQL Script'
SET @scrPart4 = '--TSQL Script'

EXEC (@scrPart1+@scrPart2+@scrPart3+@scrPart4)

1 июн 09, 19:18    [7253263]     Ответить | Цитировать Сообщить модератору
 Re: организация ветвления с GO  [new]
step_ks
Member

Откуда:
Сообщений: 936
Проверка на существование
3 июн 09, 06:02    [7258748]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить