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

Откуда:
Сообщений: 839
не придумал как назвать тему посему назвал по тупому
можно ли реализовать что то типа
declare @tt varchar(100)
set @tt='1,2,3'

select * from PCElement
where id in (@tt)
для чего надо такой изврат?у нас есть подразделение у которого канал связи с главным офисом тоньше волоса..посему надо минимизировать передачу больших запросов...поэтому хочу всунуть код в процедуру на сервере и передавать в строке в качестве параметра список обрабатываемых значений

если нельзя...то какие есть варианты..
у меня пока только парсинг строки на уме
25 июл 11, 11:38    [11021753]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли?  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
ther,

Можно через join.
25 июл 11, 11:54    [11021912]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли?  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
gds
ther,

Можно через join.

Только надо будет не строку передавать, а TVP, DataRecord или в два этапа с временной таблицей (полный изврат).
25 июл 11, 11:57    [11021947]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли?  [new]
iap
Member

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

declare @tt varchar(100)
set @tt='1,2,3'

select * from PCElement
where ','+@tt+',' LIKE '%,'+CAST(id AS VARCHAR)+',%';
Это если гарантируется, что числа идут только с разделителем-запятой.

Массивы и Списки в SQL Server
25 июл 11, 12:06    [11022037]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли?  [new]
ther
Member

Откуда:
Сообщений: 839
gds
оу...звучит страшно..я пока пришел к передаче строки в виде
{52793},{52794},{52861}
и парсингом с примера iap из темы
  declare @i int

  set @i=1	
  while @i<200 begin
  	insert into #tmp 
    	select @i
      union
      select @i+1
      union
      select @i+2
      union
      select @i+3
      
    set @i=@i+4
  end

  SELECT SUBSTRING(@Str,number+1, CHARINDEX('}',@Str,number)-number-1)[Param]
	FROM #tmp
	WHERE SUBSTRING(@Str,number,1)='{'  
и опосля уже можно крутить как хо
25 июл 11, 12:08    [11022053]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
ther,

declare @tt varchar(100)
set @tt='1,2,3'

select * from PCElement
where ','+@tt+',' LIKE '%,'+CAST(id AS VARCHAR)+',%';
Это если гарантируется, что числа идут только с разделителем-запятой.

Массивы и Списки в SQL Server
Только про индексы при таком подходе надо забыть.
25 июл 11, 12:10    [11022067]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли?  [new]
ther
Member

Откуда:
Сообщений: 839
iap
круто пасиб конструкция в новинку..и пасиб за ссыль читну....разделить точно будет запятая и все..строка формируется программно
25 июл 11, 12:14    [11022094]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли?  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
ther
iap
круто пасиб конструкция в новинку..и пасиб за ссыль читну....разделить точно будет запятая и все..строка формируется программно

А делфи сериализовать в xml умеет ? если да, то передать как хмл и уж на сервере заджойнить.
25 июл 11, 13:15    [11022535]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли?  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4997
Ken@t
А делфи сериализовать в xml умеет ?

Дельфи умеет практически все, что умеет программист.
26 июл 11, 10:22    [11026487]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить