powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли в качестве параметра хранимой процедуры указать переменную табличного т
7 сообщений из 7, страница 1 из 1
Можно ли в качестве параметра хранимой процедуры указать переменную табличного т
    #32025939
alexander_karpenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день Уважаемые!
Буду благодарен за Ваш совет!

Есть желание, в хранимую процедуру передать набор значений
(например, идентификаторов) в виде переменой типа table
или временной таблицы, чтобы потом выполнив соелинение (join)
отобрать только нужные мне данные. Несмотря на то, что я не нашел
в документации информации про невозможность такого подхода (решить "в лоб" не получилось),
лучшее что я придумал передавать эти идентификаторы в виде строки значений,
выполняя формирование таблицы идентификаторов внутри хранимой процедуры (не создавать же конструкцию
"where [...] in (ID1, ID2,...IDn)"). Конечно некрасиво, но что делать?
С другой стороны у меня ощушение, что существует более корректное решение этой задачки!?

С Уважением Александр
...
Рейтинг: 0 / 0
Можно ли в качестве параметра хранимой процедуры указать переменную табличного т
    #32025959
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOL - Creating and Maintaining Databases - Tables - Designing Tables - Specifying a Column Data Type - Special Data

"The table data type can be used only to define local variables of type table or the return value of a user-defined function."
...
Рейтинг: 0 / 0
Можно ли в качестве параметра хранимой процедуры указать переменную табличного т
    #32025974
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так через временную таблицу можно.
...
Рейтинг: 0 / 0
Можно ли в качестве параметра хранимой процедуры указать переменную табличного т
    #32025990
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у Вас 2000-й, напишите функцию, которая из строки делает таблицу
...
Рейтинг: 0 / 0
Можно ли в качестве параметра хранимой процедуры указать переменную табличного т
    #32026041
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, тяжело жить без макроподстановок.

Почитай статью о динамическом создании SQL на этом сайте, может натолкнет на какие-нибудь идеи:

http://www.sql.ru/articles/mssql/02030102WhenToUseDynamicSQL.shtml
...
Рейтинг: 0 / 0
Можно ли в качестве параметра хранимой процедуры указать переменную табличного т
    #32026151
alexander_karpenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо, что не оставили без внимания мой вопрос, но я чувствую, что не совсем точно изложил его суть, не написав, зачем мне это нужно

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

Проблема заключается в том, что я не могу сделать универсальную хранимую процедуру (например для расчета остатков)
которая бы работала с набором идентификаторов (товаров), которые ничем не связаны между собой

Если есть, какая-нибудь сущность их объединяющая,
например все товары находятся в одном документе, или в одной ветви классификатора
- все просто: передаю ид связывающей сущности, внутри процедуры разворачиваю его в набор товаров
(хотя и в этом случае придется создавать, или разные хранимки, или усложнять проц. IF-ами, в зависимости от типа связывающей сущности)
Несколько логичней было бы (мне так кажется), сначала сформировать набор идентификаторов (например из 1докум + 2докум + nдокум, или указать руками "хочу это, это и это"), а потом передать этот набор в другую хранимку в качестве параметра и на выходе получить результат (те же остатки)

Использовать здесь временную таблицу, как советовал tygra, удачно не получилось (тормозит жутко, а даже посмотреть план запроса
не получается, так как я в этой хранимке ссылаюсь на временную таблицу, о которой msSQL "ничего не знает").

Использовать строку для передачи идентификаторов пробовал, как узкоспециализированный вариант - сойдет, но универсальный врядли
(ограничение на длину, да и не очень красиво - то)

Насколько я понял, скорее всего, нет стандартных вариантов решения этой проблемки. Жаль, конечно, многие вещи можно было бы сделать лучше и проще.

С Уважением Александр.
...
Рейтинг: 0 / 0
Можно ли в качестве параметра хранимой процедуры указать переменную табличного т
    #32026161
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда используй обычную таблицу, типа ID, Sender_ID, где первое поле - это идентификатор товара, вторая - какой-то идентификатор объекта, который в эту таблицу данный ID товара положил. А в процедуру передавай только идентификатор объекта. Тогда по нему найдешь все идентификаторы товара, которые передал в данный момент. Тогда не будет пересечений между ID товара и работать будет как обычная таблица (и планы и т.д.). Только нужно убивать то, что передавал, в какой-то момент, чтобы не копилось в этой таблице. Ну типа, формируешь набор, передаешь, получаешь результат, убиваешь набор.

Вроде всем требованиям отвечает.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли в качестве параметра хранимой процедуры указать переменную табличного т
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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