Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Таблица как входной параметр  [new]
Exproment
Member

Откуда:
Сообщений: 416
Добрый вечер.
Можно ли, а если можно то каким образом передать в качестве параметра пакета таблицу? Для 2005 и 2008 версий. (нашел только средствами преобразования в XML)

Если Важно:
Приложение на Delphi получает TExcelRow и было-бы неплохо данный объект передать в пакет для последующей работы с ним )
12 апр 12, 00:10    [12402936]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18328
Если не ошибаюсь, то declare @t table может быть передана в качестве параметра в процедуру, но из приложения дельфи такое не получится. Используй xml или binary(если много данных), и на клиенте распарсивай.
12 апр 12, 00:26    [12402984]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Табличные аргументы появились только в 2008. Для 2005 - XML.
12 апр 12, 00:30    [12402997]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Не обязательно всё делать в одну команду. Можно сделать в несколько:
1. Объявить табличную переменную
2. Зафигачить в неё данные
3. Вызвать процедуру как Query
Оформить как библиотечную функцию.

... А потом, поковырять стандартную либу и расширить типы параметров до табличных.

Excel. Послать файло и загрузить через провайдер. Или сохранить как CSV и залить через BCP.
12 апр 12, 00:47    [12403045]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
Exproment
Member

Откуда:
Сообщений: 416
Mnior
Excel. Послать файло и загрузить через провайдер. Или сохранить как CSV и залить через BCP.

На сервере строго запретили устанавливать провайдеры. =) Аргументировали это тем, что система 64 разрядная и нормальных OLE провайдеров нет =) Переубедить невозможно =) Приходится на стороне клиента =(

Ennor Tiegael, а как примерно в 2008 это выглядит ? )
12 апр 12, 08:17    [12403365]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
Glory
Member

Откуда:
Сообщений: 104751
Exproment
Можно ли, а если можно то каким образом передать в качестве параметра пакета таблицу?

А вот откуда эта "таблица" взялась на клиенте ?
Наверное какой то грид, в котором пользователь накрыжил какие то элементы ?
12 апр 12, 08:31    [12403394]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
Exproment
Member

Откуда:
Сообщений: 416
таблица составлена из Excel файла(выбраны нужные столбцы и строки).
12 апр 12, 08:43    [12403427]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Exproment
Приложение на Delphi


Приложение Delphi, которое использует компоненты "от ADO" не может использовать параметры табличного типа. А 2005 их не поддерживает.

Exproment
Аргументировали это тем, что система 64 разрядная и нормальных OLE провайдеров нет =)


Есть, но

Exproment
На сервере строго запретили устанавливать провайдеры.


для продакшена это верно, но могут быть и другие "дополнительные сервера". Не хотите у своих колег поинтересоваться, прежде чем на форум обращаться?
12 апр 12, 08:46    [12403433]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
Glory
Member

Откуда:
Сообщений: 104751
Exproment
таблица составлена из Excel файла

Какой клиентский объект вы называете "таблицей" то ?
Или вы прямо в Excel работаете ?
12 апр 12, 08:48    [12403437]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Exproment
таблица составлена из Excel файла(выбраны нужные столбцы и строки).

Это не таблица в смысле SQL, а "dataset" в Дельфи, или грид в Экселе, прямо передавать можно только в рамках одного процесса, иногда продукта
12 апр 12, 09:07    [12403476]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
Exproment
Member

Откуда:
Сообщений: 416
pkarklin
для продакшена это верно, но могут быть и другие "дополнительные сервера". Не хотите у своих колег поинтересоваться, прежде чем на форум обращаться?

Конечно интересовался =)

pkarklin
Приложение Delphi, которое использует компоненты "от ADO" не может использовать параметры табличного типа.

Вот это мне и нужно было услышать =) не может так не может... ) спасибо.

Glory
Какой клиентский объект вы называете "таблицей" то ?

Какой нужен, к тому и приведу =) на данный момент это Ole-объект диапазона ячеек.
12 апр 12, 09:11    [12403483]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Exproment
не может так не может


Зато приложение на Delphi может открыть датасет из локального Excel файла, используя Jet провайдера, и для каждой записи вызвать хп на SQL Server.

Для не очень больших файлов это нормальное и работающее решение.
12 апр 12, 09:27    [12403535]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Mnior
Не обязательно всё делать в одну команду. Можно сделать в несколько:
1. Объявить табличную переменную
2. Зафигачить в неё данные
3. Вызвать процедуру как Query
Оформить как библиотечную функцию.

... А потом, поковырять стандартную либу и расширить типы параметров до табличных.

Excel. Послать файло и загрузить через провайдер. Или сохранить как CSV и залить через BCP.
Я в Delphi всё это делаю в Query.
Query.SQL перед этим формирую, естественно
12 апр 12, 09:33    [12403556]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
pkarklin
Exproment
не может так не может


Зато приложение на Delphi может открыть датасет из локального Excel файла, используя Jet провайдера, и для каждой записи вызвать хп на SQL Server.

Для не очень больших файлов это нормальное и работающее решение.
Из грида в Delphi очень просто сформировать SQL Query, который просто выполнить, и всё.
Даже от источника данных не зависит.
12 апр 12, 09:37    [12403576]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
iap
Из грида в Delphi очень просто сформировать SQL Query, который просто выполнить, и всё.
Даже от источника данных не зависит.


Открытый набор не совсем обязательно выводить в грид, ибо гаразо проше связать датасет с, например, TADOStoredProc, чтоб подстановка значений параметров происходила автоматически, и в цикле прогнать вызывая только EXEC.
12 апр 12, 09:47    [12403607]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
RENaissance
Member

Откуда: Муром->Москва
Сообщений: 10895
Есть вариант использовать CLR-сборку для заполнения табличного параметра, в которую из Delphi через массив будет передаваться набор. Также в силе вариант с XML-параметром.
12 апр 12, 10:00    [12403690]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Exproment
Mnior
Excel. Послать файло и загрузить через провайдер. Или сохранить как CSV и залить через BCP.

На сервере строго запретили устанавливать провайдеры. =) Аргументировали это тем, что система 64 разрядная и нормальных OLE провайдеров нет =) Переубедить невозможно =) Приходится на стороне клиента =(

Ennor Tiegael, а как примерно в 2008 это выглядит ? )
Я не Ennor Tiegael, но всё выглядит примерно так.
1. Создаём пользовательский табличный тип данных, если, конечно, подходящего ещё нет.
CREATE TYPE SchemaName.MyTableType AS TABLE(/*тут определение полей и констрейнтов*/)
http://msdn.microsoft.com/ru-ru/library/ms175007(v=sql.100).aspx
Получился объект, на который надо выдать соответствующие права.
2. Создаём процедуру или функцию с параметром типа MyTableType READONLY.
Внутри процедуры обращаемся с этим параметром как с таблицей, в которой ничего нельзя изменять.
3. Формируем запрос
DECLARE @MyTable MyTableType;
INSERT @MyTable() VALUES(); /*Можно и UNION, и отдельные SELECTы - зависит от вкуса и количества данных*/
........................................
EXECUTE chemaName.MyProc @MyTable READONLY, .../*тут остальные параметры, можно и ещё табличных добавить*/;
Вот как-то так.
http://msdn.microsoft.com/ru-ru/library/bb510489(v=sql.100).aspx
12 апр 12, 10:28    [12403832]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
как много букв.

Всё очень просто.
По сабжу: создаете временную таблицу. Наливаете ее необходимыми данными. В запросе или ХП юзаете эти данные сколько душе угодно.
Главное знать, как создать ВТ, чтоб другие батчи ее видели. :)
Таких таблиц можно создать несколько.

Одно из применений - передача списка значений в ХП для построения отчета.
Никаких ХМЛ, парсинга, динамикСКЛ.

зы: Делаю это по неск. раз в день. Уже много лет.
12 апр 12, 10:42    [12403963]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
LSV
как много букв.

Всё очень просто.
По сабжу: создаете временную таблицу. Наливаете ее необходимыми данными. В запросе или ХП юзаете эти данные сколько душе угодно.
Главное знать, как создать ВТ, чтоб другие батчи ее видели. :)
Таких таблиц можно создать несколько.

Одно из применений - передача списка значений в ХП для построения отчета.
Никаких ХМЛ, парсинга, динамикСКЛ.

зы: Делаю это по неск. раз в день. Уже много лет.
Попробуйте это сделать в функции
12 апр 12, 10:45    [12403993]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
iap
Попробуйте это сделать в функции
Кэп, я знаю, что функции тут пасуют...
Для таких случаев можно делать подобное в постоянной таблице с признаком USЕR_ID() или SPID.

Мне только пару раз реально потребовать видеть в ф-ции врем.таблицу. Обошёлся другими приёмами.
12 апр 12, 12:31    [12404943]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
Klick
Member

Откуда: Стерлитамак - Москва
Сообщений: 1023
Exproment
На сервере строго запретили устанавливать провайдеры. =) Аргументировали это тем, что система 64 разрядная и нормальных OLE провайдеров нет =) Переубедить невозможно =) Приходится на стороне клиента =(


И ваши такие же? :) Админы они такие админы :)
12 апр 12, 12:54    [12405116]     Ответить | Цитировать Сообщить модератору
 Re: Таблица как входной параметр  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Exproment
Mnior
Excel. Послать файло и загрузить через провайдер. Или сохранить как CSV и залить через BCP.

На сервере строго запретили устанавливать провайдеры. =) Аргументировали это тем, что система 64 разрядная и нормальных OLE провайдеров нет =) Переубедить невозможно =) Приходится на стороне клиента =(
Приавильно говорят. Вы б ещё с Вордовских документов закачивали данные.
Но BCP это не провайдер.
Так что писать приложения ради закачки Excel - эпично.
13 апр 12, 09:22    [12409800]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить