Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

Предача списка в качестве параметра в ХП MS SQL   Найти похожие ветки 

 
Ярослав   (2005-06-07 14:11) [0]

Подскажите как передать в качестве параметра из Delphi ADOCommand
список значений в ХП для использования его в условии:
Where xxxID in (список)
где xxxID - поле типа Int
а  список например - 12, 4, 5445, 5423, 22, 666
Я пробовал делать параметр как стороку (@param1 as varchar(8000))
процедура компилируется но при выполнении ругается, что не может переделать verchar в Integer
Как тут быть


 
-=XP=- ©   (2005-06-07 14:17) [1]

Вся проблема тут: 666 :)

А если серьезно, то откуда берутся эти числа для списка?


 
Silver Alex ©   (2005-06-07 14:35) [2]

вот тебе функция в которую можно передать список,  например - 12, 4, 5445, 5423, 22, 666. А вернет она тебе набор данных.Использовать можно так.

select id,name from MainTable
where
id in (select id from f_StrToTable("12, 4, 5445, 5423, 22, 666")

CREATE  FUNCTION dbo.f_StrToTable (@strID varchar(5000) )  
RETURNS @Table table(id int) AS  
BEGIN
  declare @tmp varchar (5000)
  declare @result varchar(1024)
  declare @n int
  declare @pos int
---------------------
   set @n=1
   set @pos=1
  while @n<=len(@strid)
  begin
    set @tmp=substring(@strid, @n, 1)
    if @tmp="," -- or @n=len(@strid)
    begin
      set @result=substring(@strid,@POS, @n-@POS)
      insert into @Table(id)
      values(CONVERT(VARCHAR(32),@result) )    
      SET @pos=@n+1  
    end
    if @n=len(@strid)
    begin
      set @result=substring(@strid,@POS, @n-@POS+1)
      insert into @Table(id)
      values(CONVERT(VARCHAR(32),@result) )    
    end
    set @n=@n+1
   
  end
  return
END


 
Ega23 ©   (2005-06-07 14:35) [3]

:о)

Только что коллеге объяснял, как делается...


CREATE PROCEDURE S_MyProc
@Where varchar (2000)

as
Declare @SQLMain varchar(8000)

Set @SQLMain="Select * from Table 1 where xxxID in ("+@where"+")"
exec(@SQLMain)
return(0)

GO



 
sniknik ©   (2005-06-07 14:43) [4]

SELECT * FROM Table1
WHERE CHARINDEX(" "+Cast(xxxID AS VarChar(5))+",", :Param) > 0

ParamByName("Param").Value:= " 12, 4, 5445, 5423, 22, 666,";


 
Ega23 ©   (2005-06-07 14:55) [5]

2 sniknik ©   (07.06.05 14:43) [4]

Прикольно!
Только долго, походу, будет...


 
Zz_   (2005-06-07 15:19) [6]

http://www.sql.ru/articles/mssql/03060701ArraysAndListsInSQLServer.shtml


 
sniknik ©   (2005-06-07 15:50) [7]

Ega23 ©   (07.06.05 14:55) [5]
да скорее всего, и индекс так не будет использоваться и операции со строками... единственный плюс короткая запись, на маленьких таблицах можно использовать.
и разделителя хватит одного кстати, вот так строку если задавать (неизвестно еще откуда она берется)
" 12 4 5445 5423 22 666"
(но естественно не это "главный" тормоз)

да и вообще это как раз тот случай когда параметры лишние (спорили в соседней ветке), составной запрос здесь самое то (имхо).


 
Danilka ©   (2005-06-07 16:05) [8]

А если параметров будет несколько десятков? Может, в этом случае быстрее всего будет записать их в таблицу и соединить с ней?


 
Destup   (2005-06-07 17:02) [9]

Приветствую всех.

Начальство поставило задачу срочно изучить хранимые процедуры (MS SQL + Delphi 5) исключительно через TStoredProc (т.е. без ADO и TQuery).
И набросало такой план изучения -

1. Создание и вызов ХП.
2. Передать ХП параметр по ссылке (???)
3. Реализовать и использовать ХП возвращающую курсор.
4. ... возвращающую несколько курсоров.

вроде пока всё.

С первым я справился (хоть раньше на Делфи почти не кодил)
А вот со вторым ... это как ?

StoredProc1.Params.ParamByName("@num").Value := 5;

Это я прямо указал что хочу передать в ХП, а как по ссылке ?

Третье ... что такое курсор я смутно представляю (набор данных возвращаемых sql запросом ?)
Ну написал я   StoredProc1.Active := True;
и в DBGrid посыпались данные (курсор ?) через DataSource.
А ... а где мне получить указатель на этот курсор не выводя его в DBGrid ?
А если ХП вернула 2 и более курсоров ?

Весь инет облазил, не нашёл примера.
Помогите кто чем может, желательно маленькими кусочками кода.

Спасибо.
Евгений.


 
Destup   (2005-06-07 17:02) [10]

ступил
простите ....



Страницы: 1 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
14-1119360078
вразлет
2005-06-21 17:21
2005.07.18
LOL


3-1118302418
mike(c)
2005-06-09 11:33
2005.07.18
измученный вопрос про "jpg"


4-1116872927
alex-drob
2005-05-23 22:28
2005.07.18
Проверка SetWindowsHookEx


3-1117696945
ike
2005-06-02 11:22
2005.07.18
ADO - Access - Как получить значение сгенеренного ID - counter


14-1118633367
Тем
2005-06-13 07:29
2005.07.18
Вопрос по Фотошопу. Как поменять местами каналы ?