Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

Предача списка в качестве параметра в ХП 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.038 c
3-1117874011
DSKalugin
2005-06-04 12:33
2005.07.18
наследники TCustomADODataSet


1-1120406292
sofs
2005-07-03 19:58
2005.07.18
Загрузка большого кол-ва информации из массива в RichEdit


1-1119782265
Lamer blin
2005-06-26 14:37
2005.07.18
Word Aplication


1-1118527949
Вин2
2005-06-12 02:12
2005.07.18
Есть цвет фона, надо вычислить наиболее контрастный цвет для


3-1118270900
Dron1173
2005-06-09 02:48
2005.07.18
Обработка ошибок при работе с базой данных.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский