powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Передать массив в SQL 6.5
17 сообщений из 17, страница 1 из 1
Передать массив в SQL 6.5
    #32000113
Фотография MadMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возникла небольшая проблема - передавть не отдельные параметры во встроенную процедуру, а сразу массив, скажем бинарный. Сделать это нужно из Delphi 4.0. Полагаю, можно воспользоваться типами Binary и Varbinary. Подскажите, пожалуйста, кто встречался с анналогичной проблемой.
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000114
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Передать-то массив в виде Binary или Varbinary можно, но как потом с этим работать? Нормальных функций для работы с такими данными в SQL нет, да он для этого и не предназначен.
Я бы предложил два варианта:
1. Передается строка с списком чисел через, допустим, запятую. Например "1,3,5,7,9". Внутри процедуры можно проверить, есть ли это число в строке: if ','+convert(varchar(5),n)+',' like ','+@s+',' ...
@s - это передаваемая строка, n - поле в таблице для проверки
Естественно это хорошо если значений не так много и все они где-то уже есть
2. Создать таблицу, где одна колонка будет некий уникальный для набора данных ключ, заполнять эту таблицу отдельно, а потом передавать процедуре как параметр этот ключ.

Я понимаю что хочется красиво, передать массив, как в паскале. Не получиться. Тут всё не так, мышление надо несколько менять.
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000425
AlexSol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле нужно сочетать 1 и 2 способ.
передавать строку типа '1,2,12,34,11111'
в sp,
создавать в ней временную таблицу
и, в цикле писать в нее
(разобранные в том же цикле с использованием строковых функций)
1 потом 2 и т.д
Ну а потом INNER JOIN и ура.
++
Локальное приложение работает только на генерацию строки
и на обработку полученного рез-та.
сеть разгружается...
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000426
AlexSol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле нужно сочетать 1 и 2 способ.
передавать строку типа '1,2,12,34,11111'
в sp,
создавать в ней временную таблицу
и, в цикле писать в нее
(разобранные в том же цикле с использованием строковых функций)
1 потом 2 и т.д
Ну а потом INNER JOIN и ура.
++
Локальное приложение работает только на генерацию строки
и на обработку полученного рез-та.
сеть разгружается...
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000427
AlexSol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле нужно сочетать 1 и 2 способ.
передавать строку типа '1,2,12,34,11111'
в sp,
создавать в ней временную таблицу
и, в цикле писать в нее
(разобранные в том же цикле с использованием строковых функций)
1 потом 2 и т.д
Ну а потом INNER JOIN и ура.
++
Локальное приложение работает только на генерацию строки
и на обработку полученного рез-та.
сеть разгружается...
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000430
Ольга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во временную таблицу можно писать не в цикле, если воспользоваться оператором 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
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000431
Ольга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во временную таблицу можно писать не в цикле, если воспользоваться оператором 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
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000432
Ольга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во временную таблицу можно писать не в цикле, если воспользоваться оператором 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
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000433
Ольга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во временную таблицу можно писать не в цикле, если воспользоваться оператором 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
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000434
Ольга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во временную таблицу можно писать не в цикле, если воспользоваться оператором 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
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000435
Ольга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во временную таблицу можно писать не в цикле, если воспользоваться оператором 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
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000438
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ольга!
Гениально!( на полном серьёзе)
Действительно такое решение можно и 6 раз послать :)

С приветом Сергей
sergsuper@mail.ru
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000439
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ольга!
Гениально!( на полном серьёзе)
Действительно такое решение можно и 6 раз послать :)

С приветом Сергей
sergsuper@mail.ru
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000452
AlexSol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Снимаю шляпу перед дамой.
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000455
AlexSol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отдайте шляпу.
В чистом виде не работает, ругается на replace
работает так:
declare @strTmp varchar(1000)
select @strTmp = та самая строка
exec(@strTmp)
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000456
Ольга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, сорри, не проверила. Действительно, exec функции не любит. Но ты же выкрутился из положения ;) А шляпу я и не брала. :)
...
Рейтинг: 0 / 0
Передать массив в SQL 6.5
    #32000457
Ольга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, сорри, не проверила. Действительно, exec функции не любит. Но ты же выкрутился из положения ;) А шляпу я и не брала. :)
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Передать массив в SQL 6.5
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]