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

Откуда:
Сообщений: 18
Можно ли использовать оператор IN сразу по нескольким полям вроде того как делается в oracle
select * from mytable x where  (x.value1,x.value2) in ((v1,v2), ..., (vn1, vn2))


Подскажите как лучше сделать, учитывая что список значений(пар v1,v2) которые приходится проверять оч большой
20 июл 15, 11:44    [17911960]     Ответить | Цитировать Сообщить модератору
 Re: оператор In  [new]
Glory
Member

Откуда:
Сообщений: 104751
heroin2
Можно ли использовать оператор IN сразу по нескольким полям вроде того как делается в oracle

Нет
Для это используют EXISTS()

heroin2
Подскажите как лучше сделать, учитывая что список значений(пар v1,v2) которые приходится проверять оч большой

Откуда берется ваш список ? И в каком виде он существует на сервере
20 июл 15, 11:46    [17911970]     Ответить | Цитировать Сообщить модератору
 Re: оператор In  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
select *
from mytable x
where EXISTS(SELECT x.value1,x.value2 INTERSECT SELECT x,y FROM(VALUES(v1,v2),...,(vn1,vn2))T(x,y));
Ясно, что лучше всего, если vn1,vn2 хранятся в таблице.
20 июл 15, 11:54    [17912019]     Ответить | Цитировать Сообщить модератору
 Re: оператор In  [new]
heroin2
Member

Откуда:
Сообщений: 18
Glory, данные на самом деле из oracle запускаю java функцию она коннектится к mssql, там должен отработать этот запрос и данные обратно в java и соответственно обратно в oracle.
а формат данных я могу любой сделать
20 июл 15, 12:46    [17912309]     Ответить | Цитировать Сообщить модератору
 Re: оператор In  [new]
Glory
Member

Откуда:
Сообщений: 104751
heroin2
Glory, данные на самом деле из oracle запускаю java функцию она коннектится к mssql, там должен отработать этот запрос и данные обратно в java и соответственно обратно в oracle.
а формат данных я могу любой сделать

Это ответ на вопорос "И в каком виде он существует на сервере ?" ?
20 июл 15, 12:50    [17912338]     Ответить | Цитировать Сообщить модератору
 Re: оператор In  [new]
heroin2
Member

Откуда:
Сообщений: 18
Glory,
формально они не существуют на этом сервере, я передаю их вместе с запросом
20 июл 15, 13:13    [17912485]     Ответить | Цитировать Сообщить модератору
 Re: оператор In  [new]
Glory
Member

Откуда:
Сообщений: 104751
heroin2
я передаю их вместе с запросом

Если вы формируете текст запроса целиком на клиенте, то к чему ваш вопрос о " учитывая что список значений(пар v1,v2) которые приходится проверять оч большой"
20 июл 15, 13:16    [17912502]     Ответить | Цитировать Сообщить модератору
 Re: оператор In  [new]
heroin2
Member

Откуда:
Сообщений: 18
Glory, возможно это была невыносимо лишняя информация для вас, в любом случае спасибо вам и iap
20 июл 15, 13:48    [17912761]     Ответить | Цитировать Сообщить модератору
 Re: оператор In  [new]
iap
Member

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

переносите данные в другую базу? Может, Вам вообще MERGE нужен?
20 июл 15, 13:51    [17912785]     Ответить | Цитировать Сообщить модератору
 Re: оператор In  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
iap
heroin2,

переносите данные в другую базу? Может, Вам вообще MERGE нужен?
Ему бы для начала лучше настроить линк между серверами баз данных...
20 июл 15, 15:35    [17913412]     Ответить | Цитировать Сообщить модератору
 Re: оператор In  [new]
heroin2
Member

Откуда:
Сообщений: 18
sphinx_mv, пока нет такой возможности и приходится мучиться через java
20 июл 15, 16:32    [17913751]     Ответить | Цитировать Сообщить модератору
 Re: оператор In  [new]
Владислав Колосов
Member

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

а какие есть возможности? Доступ к дискам сервера есть? Какие права есть на MS SQL сервере?
20 июл 15, 17:28    [17914046]     Ответить | Цитировать Сообщить модератору
 Re: оператор In  [new]
Bator
Member

Откуда: Порт пяти морей
Сообщений: 439
heroin2,
все это может обернуть в процедуру, функцию или просто скриптом:
declare @t table (v1 int, v2 int)

select @x varchar(max) = 'сюда должен попасть текст хмл или что-то, что сможете распарсить'

insert into @t(v1, v2) select x.v1, x.v2 from dbo.foo(@x) -- foo - это что-то, что выдает таблицу из двух полей из текста в вашем выбранном формате, можно функцией, можно кучу строк в скрипте писать (как больше нравится)

select 
    x.* 
  from maytable as x
  join @t as t on t.v1 = x.v1 
                 and t.v2 = x.v2
22 июл 15, 00:06    [17919398]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить