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

Откуда:
Сообщений: 271
Добрый день
Не сталкивался раньше
Как переменной @var присвоить значение "(N'АБВ', N'ГДЕ', N'КЛМ', N'ОПР')"
Хочу постоить конструкцию t.field in @var

Или это в принципе не возможно и нужно сделать через временную таблицу @tab на одно поле, и через t.field in (SELECT * FROM @tab) ?
28 июн 15, 13:26    [17825137]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
Gviber
Member

Откуда:
Сообщений: 124
 declare @var varchar(max)='[АБВ][ГДЕ][КЛМ][ОПР]';
 select T.T from (select 'АБВ' T) T
 where CHARINDEX(CONCAT('[',T.T,']'),@var)!=0


Как такой вариант?
28 июн 15, 15:18    [17825327]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
Gviber
Member

Откуда:
Сообщений: 124
Как еще вариант
declare @var varchar(max)='(N''АБВ'', N''ГДЕ'', N''КЛМ'', N''ОПР'')'
execute
(
'select T.T from (select ''АБВ'' T) T where T.T in '+@var
)
28 июн 15, 15:53    [17825427]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
Gviber
Member

Откуда:
Сообщений: 124
В общем отдельного типа для expression[ ,... n ] нет. Народ использует костыли в виде функций, xml ит.д.
28 июн 15, 16:06    [17825459]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
Понял. буду использовать
Спасибо за помощь
28 июн 15, 16:18    [17825475]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1910
2viper2viper,

для таких задач неплохо подойдут UDT Types
29 июн 15, 01:01    [17826552]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
Кролик-зануда
Guest
2All
шо за конкурс костылей?

табличная переменная, на мой взгляд, тут будет гораздо гораздее
29 июн 15, 08:32    [17826819]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
ЦБ
Member [заблокирован]

Откуда:
Сообщений: 2773
XML - наше всьо !

"К гадалке не ходи", ТС "мается" передачей списка в ХП, в качестве параметра.
Если версия сервера позволяет, то можно конечно и с табличным типом "заморочиться", но для "ленивых", ХМЛ - самое оно! :)
29 июн 15, 09:19    [17826893]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
ЦБ, не, как раз в хранимках использую таблицы.
В этой задаче в запросе много раз указано правило отбора t.field in (N'Львов', N'Одесса', N'Харьков', N'Днепр'), значения которого могут меняться.
Ну, и чтобы не менять в каждом случае, думал через переменную (предполагал что есть альтернатива таблице).
Честно говоря, XML еще не использовал, будет что почитать на выходных
Но скорее всего велосипед изобретаться не будет, сделаю через таблицу
29 июн 15, 10:10    [17827043]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
Glory
Member

Откуда:
Сообщений: 104751
2viper2viper
В этой задаче в запросе много раз указано правило отбора t.field in (N'Львов', N'Одесса', N'Харьков', N'Днепр'), значения которого могут меняться.

И откуда берется это "правило отбора" ?
29 июн 15, 10:15    [17827061]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
Glory, не из запроса. вручную вписываю в зависимости от задания (задания всегда уникальные, поэтому здесь нечего автоматизировать)
29 июн 15, 11:55    [17827525]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
Glory
Member

Откуда:
Сообщений: 104751
2viper2viper
вручную вписываю

куда ? в скрипт ?
29 июн 15, 11:56    [17827531]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
Glory, да. Пишу индивидуальные запросы под индивидуальные задачи
29 июн 15, 12:06    [17827576]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
Glory
Member

Откуда:
Сообщений: 104751
2viper2viper
Пишу индивидуальные запросы под индивидуальные задачи

Ага. А тексты заданий наверное по телефону надиктовывают. А вы сразу их в скрипты оформляете
29 июн 15, 12:09    [17827594]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
А почему вручную нельзя значения вставить в табличную переменную/временную таблицу вместо перечисления в строке?
29 июн 15, 12:44    [17827778]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
2viper2viper
Как переменной @var присвоить значение "(N'АБВ', N'ГДЕ', N'КЛМ', N'ОПР')"


Вот так

DECLARE @var nvarchar(MAX) = N'(N''АБВ'', N''ГДЕ'', N''КЛМ'', N''ОПР'')'
SELECT @var
29 июн 15, 12:55    [17827837]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
a_voronin
2viper2viper
Как переменной @var присвоить значение "(N'АБВ', N'ГДЕ', N'КЛМ', N'ОПР')"


Вот так

DECLARE @var nvarchar(MAX) = N'(N''АБВ'', N''ГДЕ'', N''КЛМ'', N''ОПР'')'
SELECT @var
А потом с кряхтением это всё парсить!

Зачем, если можно сразу в табличном виде передать?
29 июн 15, 13:02    [17827876]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
iap, таблицу и использовал в таких случаях. думал, может есть альтернатива

Glory, по разному бывает. Если нужны данные срочно (напр, во время совещания), писать офиц.тех.задание не будут.
29 июн 15, 13:52    [17828197]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9159
2viper2viper, какая такая альтернатива? Вы, часом, не забыли, что запросы выполняются к таблицам? Забудьте о строках, циклах и прочей атрибутике "классики". TSQL строится исключительно на запросах.
29 июн 15, 15:19    [17828664]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строковое значение переменной  [new]
Glory
Member

Откуда:
Сообщений: 104751
2viper2viper
Glory, по разному бывает. Если нужны данные срочно (напр, во время совещания), писать офиц.тех.задание не будут.

Если вы создаете текст уникального запроса с нуля, то зачем вам какие то переменные в t.field in @var ?
Пишите сразу константы

Ведь в другой уникальный скрипт вы тоже начнте создавать с нуля
29 июн 15, 15:26    [17828704]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить