Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
2viper2viper Member Откуда: Сообщений: 271 |
Добрый день Не сталкивался раньше Как переменной @var присвоить значение "(N'АБВ', N'ГДЕ', N'КЛМ', N'ОПР')" Хочу постоить конструкцию t.field in @var Или это в принципе не возможно и нужно сделать через временную таблицу @tab на одно поле, и через t.field in (SELECT * FROM @tab) ? |
28 июн 15, 13:26 [17825137] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Gviber Member Откуда: Сообщений: 124 |
В общем отдельного типа для expression[ ,... n ] нет. Народ использует костыли в виде функций, xml ит.д. |
28 июн 15, 16:06 [17825459] Ответить | Цитировать Сообщить модератору |
2viper2viper Member Откуда: Сообщений: 271 |
Понял. буду использовать Спасибо за помощь |
28 июн 15, 16:18 [17825475] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1692 |
2viper2viper, для таких задач неплохо подойдут UDT Types |
29 июн 15, 01:01 [17826552] Ответить | Цитировать Сообщить модератору |
Кролик-зануда
Guest |
2All шо за конкурс костылей? табличная переменная, на мой взгляд, тут будет гораздо гораздее |
29 июн 15, 08:32 [17826819] Ответить | Цитировать Сообщить модератору |
ЦБ Member [заблокирован] Откуда: Сообщений: 2773 |
XML - наше всьо ! "К гадалке не ходи", ТС "мается" передачей списка в ХП, в качестве параметра. Если версия сервера позволяет, то можно конечно и с табличным типом "заморочиться", но для "ленивых", ХМЛ - самое оно! :) |
29 июн 15, 09:19 [17826893] Ответить | Цитировать Сообщить модератору |
2viper2viper Member Откуда: Сообщений: 271 |
ЦБ, не, как раз в хранимках использую таблицы. В этой задаче в запросе много раз указано правило отбора t.field in (N'Львов', N'Одесса', N'Харьков', N'Днепр'), значения которого могут меняться. Ну, и чтобы не менять в каждом случае, думал через переменную (предполагал что есть альтернатива таблице). Честно говоря, XML еще не использовал, будет что почитать на выходных Но скорее всего велосипед изобретаться не будет, сделаю через таблицу |
29 июн 15, 10:10 [17827043] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
И откуда берется это "правило отбора" ? |
||
29 июн 15, 10:15 [17827061] Ответить | Цитировать Сообщить модератору |
2viper2viper Member Откуда: Сообщений: 271 |
Glory, не из запроса. вручную вписываю в зависимости от задания (задания всегда уникальные, поэтому здесь нечего автоматизировать) |
29 июн 15, 11:55 [17827525] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
куда ? в скрипт ? |
||
29 июн 15, 11:56 [17827531] Ответить | Цитировать Сообщить модератору |
2viper2viper Member Откуда: Сообщений: 271 |
Glory, да. Пишу индивидуальные запросы под индивидуальные задачи |
29 июн 15, 12:06 [17827576] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Ага. А тексты заданий наверное по телефону надиктовывают. А вы сразу их в скрипты оформляете |
||
29 июн 15, 12:09 [17827594] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
А почему вручную нельзя значения вставить в табличную переменную/временную таблицу вместо перечисления в строке? |
29 июн 15, 12:44 [17827778] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Вот так DECLARE @var nvarchar(MAX) = N'(N''АБВ'', N''ГДЕ'', N''КЛМ'', N''ОПР'')' SELECT @var |
||
29 июн 15, 12:55 [17827837] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
![]() Зачем, если можно сразу в табличном виде передать? |
||||
29 июн 15, 13:02 [17827876] Ответить | Цитировать Сообщить модератору |
2viper2viper Member Откуда: Сообщений: 271 |
iap, таблицу и использовал в таких случаях. думал, может есть альтернатива Glory, по разному бывает. Если нужны данные срочно (напр, во время совещания), писать офиц.тех.задание не будут. |
29 июн 15, 13:52 [17828197] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
2viper2viper, какая такая альтернатива? Вы, часом, не забыли, что запросы выполняются к таблицам? Забудьте о строках, циклах и прочей атрибутике "классики". TSQL строится исключительно на запросах. |
29 июн 15, 15:19 [17828664] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Если вы создаете текст уникального запроса с нуля, то зачем вам какие то переменные в t.field in @var ? Пишите сразу константы Ведь в другой уникальный скрипт вы тоже начнте создавать с нуля |
||
29 июн 15, 15:26 [17828704] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |