Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Параметризированный запрос и параметр как список значений. (число прочтений - 3652 )
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Параметризированный запрос и параметр как список значений.
14. Октября 2009 :: 07:19
Печать  
Много уже написано, но так и нет представления о том как можно использовать конструкцию параметризированного запроса и в качестве параметра передавать строку состоящую из идентификаторов (типа список значений).

Спасибо за разяснения.
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Параметризированный запрос и параметр как список значений.
Ответ #1 - 14. Октября 2009 :: 08:32
Печать  
chicago писал(а) 14. Октября 2009 :: 07:19:
Много уже написано, но так и нет представления о том как можно использовать конструкцию параметризированного запроса и в качестве параметра передавать строку состоящую из идентификаторов (типа список значений).

Спасибо за разяснения.

напишите как Вы себе это представляете на чистом t-sql
  
Наверх
 
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Параметризированный запрос и параметр как список значений.
Ответ #2 - 14. Октября 2009 :: 10:35
Печать  
1. Пример пар. запроса где в качестве параметров скалярные значения

Код
Выбрать все
declare @P1 int
set @P1=10
exec sp_prepexec @P1 output, N'@P1 char(9),@P2 char(9)', N'
DECLARE @ВибТов CHAR(9), @ВибСкл CHAR(9)
SET @ВибТов = @P1
SET @ВибСкл = @P2
SELECT
КвоОстаток AS [КіЗКво $Число]
FROM (
select
rg1_vt.sp1 as ТМЦ,
sum(rg1_vt.sp3) as КвоОстаток
from rg1 as rg1_vt (nolock)
where rg1_vt.period={d ''2009-10-01''}
and ((rg1_vt.sp1 = @ВибТов) AND (rg1_vt.sp2 = @ВибСкл))
group by
rg1_vt.sp1
having
sum(rg1_vt.sp3) <> 0
) as ТЗРРег
', '   I77ZV ', '     ECB '
select @P1 



Работает.

При этом исп. инструкции
Код
Выбрать все
ЗапПер.ДобПараметр(1, 14, 9, 0);
ЗапПер.ДобПараметр(1, 14, 9, 0); 



2. Пример пар. запроса где в качестве второго параметра строка из значений

Код
Выбрать все
declare @P1 int
set @P1=10
exec sp_prepexec @P1 output, N'@P1 char(9),@P2 varchar(300)', N'
DECLARE @ВибТов CHAR(9), @ВибСкл CHAR(9)
SET @ВибТов = @P1
SET @ВибСкл = @P2
SELECT
КвоОстаток AS [КіЗКво $Число]
FROM (
select
rg1_vt.sp1 as ТМЦ,
sum(rg1_vt.sp3) as КвоОстаток
from rg1 as rg1_vt (nolock)
where rg1_vt.period={d ''2009-10-01''}
and ((rg1_vt.sp1 = @ВибТов) AND (rg1_vt.sp2 IN (@ВибСкл)))
group by
rg1_vt.sp1
having
sum(rg1_vt.sp3) <> 0
) as ТЗРРег
', '   I77ZV ', Строка со списком значений
select @P1 



Не работает.

Какая должна быть эта Строка со списком значений ?

При этом исп. инструкции
Код
Выбрать все
ЗапПер.ДобПараметр(1, 14, 9, 0);
ЗапПер.ДобПараметр(1, 15, 300, 0); 


  
Наверх
ICQ  
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Параметризированный запрос и параметр как список значений.
Ответ #3 - 15. Октября 2009 :: 06:52
Печать  
мне каатца, что Скуль не проглотит СЗ, поскольку при параметриз. запросе Скуль всего 1 лишь раз интерпретирует текст запроса, а потом только подставляет в него параметры (скалярные значения), а СЗ для него уже не будет скалярным, поскольку содержит различное количество значений.
При простом запросе Текст запроса интерпретируется каждый раз перед выполнением запроса.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Параметризированный запрос и параметр как список значений.
Ответ #4 - 15. Октября 2009 :: 07:09
Печать  
А может вместо
and ((rg1_vt.sp1 = @ВибТов) AND (rg1_vt.sp2 IN (@ВибСкл)))
написать
Код
Выбрать все
and ((rg1_vt.sp1 = @ВибТов) AND (rg1_vt.sp2 IN (select @ВибСкл)))
 


Также не понятно почему нельзя использовать УложитьСписокОбъектов

  
Наверх
 
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Параметризированный запрос и параметр как список значений.
Ответ #5 - 15. Октября 2009 :: 07:51
Печать  
1. В своем посте я указал Строка со списком значений неявно, потому что есть сомнения в том что эта строка передается на сервер не совсем правильно.
Если использовать
Код
Выбрать все
ЗапПер.ДобПараметр(1, 15, 300, 0); 


то эта строка уходит на сервер как
'''     ECB '',''     ECR '''
Почему? Озадачен
2. Если выполнить запрос
Код
Выбрать все
SELECT '''     ECB '',''     ECR ''' 


получим
'     ECB ','     ECR '
Думаю это должно сработать.
3. Цитата:
Также не понятно почему нельзя использовать УложитьСписокОбъектов

Не знал, что так можно. А можно пример (для пар. запр.)?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Параметризированный запрос и параметр как список значений.
Ответ #6 - 15. Октября 2009 :: 08:05
Печать  
Остальные параметры через параметр. запрос
а список значений 1с из одного справочника передавать через
временные таблицы т.е

Примерчик :            
СписокТовары = СоздатьОбъект("СписокЗначений");
СписокТовары.ДобавитьЗначение(Тов1,"");
/* ..... */
СписокТовары.ДобавитьЗначение(ТовN,"");

rc1.УложитьСписокОбъектов(СписокТовары,"#sql_tov","Товары");
в самом sql запросе

a1.tovar in ( select val from #sql_tov " )
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать