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

Откуда:
Сообщений: 7
Как передавать Глобальную переменную в SQL, если внутри объявлена локальная переменная ?

автор
declare @ver int
Есть такой код :
SET @ver=? (если здесь поставить значение - сработает, если параметр, то у меня пишет ошибка синтаксиса или нарушение прав доступа)

select * from table1 Where vers=@ver
union all
select * from table2 Where vers=@ver
union all
select * from table3 Where vers=@ver


SQL 2000
2 июл 09, 15:20    [7369038]     Ответить | Цитировать Сообщить модератору
 Re: Использование Глобальных и Локальных переменных  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
В MS SQL нет глобальных переменных. Если Ваш вопрос про глобальные переменные и передачу их в качестве параметра связан с определенным средством разработки клиентской части, то и спрашивать следует в соответствующем разделе форума.
2 июл 09, 15:27    [7369098]     Ответить | Цитировать Сообщить модератору
 Re: Использование Глобальных и Локальных переменных  [new]
stolik
Member

Откуда:
Сообщений: 7
Извиняюсь. Имел ввиду EXEC SQL в DTS
2 июл 09, 15:31    [7369142]     Ответить | Цитировать Сообщить модератору
 Re: Использование Глобальных и Локальных переменных  [new]
Glory
Member

Откуда:
Сообщений: 104760
stolik
Извиняюсь. Имел ввиду EXEC SQL в DTS

В ExecuteSQL Task знак ? для подстановки значений можно использовать только в параметризированных запросах
Для всех остальных случаев вам придется формировать текст вашего скрипта динамически. И подменять его через DynamicProperties Task например
2 июл 09, 18:51    [7370453]     Ответить | Цитировать Сообщить модератору
 Re: Использование Глобальных и Локальных переменных  [new]
stolik
Member

Откуда:
Сообщений: 7
А вот такой запрос :

автор
declare @ver int
SET @ver=23

select * from table1 Where vers=?


почему он выдает ту же ошибку ? Здесь локальная переменная только определяется а используется параметр ...

И что мне делать, если переменная используется в запросе более чем 10 раз и переменных не одна а три ? Как мне отследить какой из параметров за что отвечает ?
Я конечно попробую упростить запрос, но, или даже НО (!) ...
3 июл 09, 09:48    [7371722]     Ответить | Цитировать Сообщить модератору
 Re: Использование Глобальных и Локальных переменных  [new]
stolik
Member

Откуда:
Сообщений: 7
Вдогонку ... а как использовать параметр в сложном запросе (когда один запрос в другом ?)

и вообще есть ли какие то еще способы передачи глобальной переменной в таком случае внутрь exec sql ?
3 июл 09, 09:53    [7371742]     Ответить | Цитировать Сообщить модератору
 Re: Использование Глобальных и Локальных переменных  [new]
Glory
Member

Откуда:
Сообщений: 104760
stolik
А вот такой запрос :

автор
declare @ver int
SET @ver=23

select * from table1 Where vers=?


почему он выдает ту же ошибку ? Здесь локальная переменная только определяется а используется параметр ...

Вы разницу между запросом и скриптом понимаете ?
3 июл 09, 15:28    [7374145]     Ответить | Цитировать Сообщить модератору
 Re: Использование Глобальных и Локальных переменных  [new]
stolik
Member

Откуда:
Сообщений: 7
т.е. как только я добавляю определение локальной переменной запрос автоматически (весь) становится скриптом ... прикольно. Глупо но имеет место быть.

А как насчет передачи параметра в сложный запрос - тоже с помощью Динамически изменяемых свойст ?

А как в Динамическом передавать значение переменной ?

Вот из такого типа должно получиться с определенными значениями (вместо @ver):
автор
select * from table1 Where vers=@ver
union all
select * from table2 Where vers=@ver
union all
select * from table3 Where vers=@ver


Или я должне еще заранее с помощью ActiveScript все определять ? а смысл тогда ? я вообще все могу сделать с помощью ActiveScript, но после сотни-другой строчек теряется понимание.
3 июл 09, 15:48    [7374342]     Ответить | Цитировать Сообщить модератору
 Re: Использование Глобальных и Локальных переменных  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ну формируете в какой-то Глобальной переменной текст вашего скрипта.
И через DynamicProperties Task меняете текущий текст ExecuteSQL Task на текст этой переменной


=stolik

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

Вы можете это все сделать вообще без DTS, в своем приложении.
Просто непонято, что вы вообще делаете, и почему это нужно делать именно в ExecuteSQL Task
3 июл 09, 15:54    [7374390]     Ответить | Цитировать Сообщить модератору
 Re: Использование Глобальных и Локальных переменных  [new]
stolik
Member

Откуда:
Сообщений: 7
Ясно. Спасибо. Видимо так и придется делать ... просто увидев про параметры как то сильно на них понадеялся, а оказывается все как обычно у Microsoft - здесь чуть-чуть недоделаем, здесь свое придумаем, а здесь будет убирем - ну зачем пользователю то что положено по RFC.

в принципе как такогого приложения нет - есть набор скриптов и DTS, которые обеспечивают бесперебойную работу, актуализацию данных и организацию Анализа, автоматическая загрузка данных из Excel, Access в базу с автоматической простановкой признаков и все такое ...
3 июл 09, 16:55    [7374909]     Ответить | Цитировать Сообщить модератору
 Re: Использование Глобальных и Локальных переменных  [new]
Glory
Member

Откуда:
Сообщений: 104760
stolik
Ясно. Спасибо. Видимо так и придется делать ... просто увидев про параметры как то сильно на них понадеялся, а оказывается все как обычно у Microsoft - здесь чуть-чуть недоделаем, здесь свое придумаем, а здесь будет убирем - ну зачем пользователю то что положено по RFC.


Потому что вы путаете параметризацию с подменой произвольного фрагмента скрипта.
3 июл 09, 16:57    [7374936]     Ответить | Цитировать Сообщить модератору
 Re: Использование Глобальных и Локальных переменных  [new]
stolik
Member

Откуда:
Сообщений: 7
Glory

Потому что вы путаете параметризацию с подменой произвольного фрагмента скрипта.


Нет, я просто по наивности полагал, что если параметризация (без указания области действия), то в обобщенном виде - а не только для одного простого запроса (параметр не поддерживается даже запросом, если он использует подзапросы - а это ТОЧНО не скрипт).
Офф: а что мешало и взаправду сделать inline функционал ?
3 июл 09, 17:30    [7375185]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить