|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
Возникла небольшая проблема - передавть не отдельные параметры во встроенную процедуру, а сразу массив, скажем бинарный. Сделать это нужно из Delphi 4.0. Полагаю, можно воспользоваться типами Binary и Varbinary. Подскажите, пожалуйста, кто встречался с анналогичной проблемой. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2000, 05:42 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
Передать-то массив в виде Binary или Varbinary можно, но как потом с этим работать? Нормальных функций для работы с такими данными в SQL нет, да он для этого и не предназначен. Я бы предложил два варианта: 1. Передается строка с списком чисел через, допустим, запятую. Например "1,3,5,7,9". Внутри процедуры можно проверить, есть ли это число в строке: if ','+convert(varchar(5),n)+',' like ','+@s+',' ... @s - это передаваемая строка, n - поле в таблице для проверки Естественно это хорошо если значений не так много и все они где-то уже есть 2. Создать таблицу, где одна колонка будет некий уникальный для набора данных ключ, заполнять эту таблицу отдельно, а потом передавать процедуре как параметр этот ключ. Я понимаю что хочется красиво, передать массив, как в паскале. Не получиться. Тут всё не так, мышление надо несколько менять. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2000, 08:26 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
На самом деле нужно сочетать 1 и 2 способ. передавать строку типа '1,2,12,34,11111' в sp, создавать в ней временную таблицу и, в цикле писать в нее (разобранные в том же цикле с использованием строковых функций) 1 потом 2 и т.д Ну а потом INNER JOIN и ура. ++ Локальное приложение работает только на генерацию строки и на обработку полученного рез-та. сеть разгружается... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2000, 11:00 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
На самом деле нужно сочетать 1 и 2 способ. передавать строку типа '1,2,12,34,11111' в sp, создавать в ней временную таблицу и, в цикле писать в нее (разобранные в том же цикле с использованием строковых функций) 1 потом 2 и т.д Ну а потом INNER JOIN и ура. ++ Локальное приложение работает только на генерацию строки и на обработку полученного рез-та. сеть разгружается... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2000, 11:01 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
На самом деле нужно сочетать 1 и 2 способ. передавать строку типа '1,2,12,34,11111' в sp, создавать в ней временную таблицу и, в цикле писать в нее (разобранные в том же цикле с использованием строковых функций) 1 потом 2 и т.д Ну а потом INNER JOIN и ура. ++ Локальное приложение работает только на генерацию строки и на обработку полученного рез-та. сеть разгружается... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2000, 11:01 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
Во временную таблицу можно писать не в цикле, если воспользоваться оператором EXEC, параметр которого формировать из входного параметра-строки процедуры. Например, если мы передаем входной параметр @arraypar в виде '1,3,5,7,9', то это будет выглядеть так: exec('insert #ttt (field1) select '+replace(@arraypar,',',' union select ')) В принципе, в качестве входного параметра можно передавать уже готовую строку в виде: select 1 union select 3 union select 5 union select 7 union select 9 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2000, 13:22 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
Во временную таблицу можно писать не в цикле, если воспользоваться оператором EXEC, параметр которого формировать из входного параметра-строки процедуры. Например, если мы передаем входной параметр @arraypar в виде '1,3,5,7,9', то это будет выглядеть так: exec('insert #ttt (field1) select '+replace(@arraypar,',',' union select ')) В принципе, в качестве входного параметра можно передавать уже готовую строку в виде: select 1 union select 3 union select 5 union select 7 union select 9 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2000, 13:22 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
Во временную таблицу можно писать не в цикле, если воспользоваться оператором EXEC, параметр которого формировать из входного параметра-строки процедуры. Например, если мы передаем входной параметр @arraypar в виде '1,3,5,7,9', то это будет выглядеть так: exec('insert #ttt (field1) select '+replace(@arraypar,',',' union select ')) В принципе, в качестве входного параметра можно передавать уже готовую строку в виде: select 1 union select 3 union select 5 union select 7 union select 9 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2000, 13:22 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
Во временную таблицу можно писать не в цикле, если воспользоваться оператором EXEC, параметр которого формировать из входного параметра-строки процедуры. Например, если мы передаем входной параметр @arraypar в виде '1,3,5,7,9', то это будет выглядеть так: exec('insert #ttt (field1) select '+replace(@arraypar,',',' union select ')) В принципе, в качестве входного параметра можно передавать уже готовую строку в виде: select 1 union select 3 union select 5 union select 7 union select 9 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2000, 13:22 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
Во временную таблицу можно писать не в цикле, если воспользоваться оператором EXEC, параметр которого формировать из входного параметра-строки процедуры. Например, если мы передаем входной параметр @arraypar в виде '1,3,5,7,9', то это будет выглядеть так: exec('insert #ttt (field1) select '+replace(@arraypar,',',' union select ')) В принципе, в качестве входного параметра можно передавать уже готовую строку в виде: select 1 union select 3 union select 5 union select 7 union select 9 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2000, 13:23 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
Во временную таблицу можно писать не в цикле, если воспользоваться оператором EXEC, параметр которого формировать из входного параметра-строки процедуры. Например, если мы передаем входной параметр @arraypar в виде '1,3,5,7,9', то это будет выглядеть так: exec('insert #ttt (field1) select '+replace(@arraypar,',',' union select ')) В принципе, в качестве входного параметра можно передавать уже готовую строку в виде: select 1 union select 3 union select 5 union select 7 union select 9 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2000, 13:23 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
Ольга! Гениально!( на полном серьёзе) Действительно такое решение можно и 6 раз послать :) С приветом Сергей sergsuper@mail.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2000, 14:06 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
Ольга! Гениально!( на полном серьёзе) Действительно такое решение можно и 6 раз послать :) С приветом Сергей sergsuper@mail.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2000, 14:07 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
Снимаю шляпу перед дамой. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2000, 10:15 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
Отдайте шляпу. В чистом виде не работает, ругается на replace работает так: declare @strTmp varchar(1000) select @strTmp = та самая строка exec(@strTmp) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2000, 11:45 |
|
Передать массив в SQL 6.5
|
|||
---|---|---|---|
#18+
Да, сорри, не проверила. Действительно, exec функции не любит. Но ты же выкрутился из положения ;) А шляпу я и не брала. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2000, 13:11 |
|
|
start [/forum/topic.php?fid=46&fpage=3599&tid=1827673]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 174ms |
0 / 0 |