Sql сервер - функция «Карта»? - PullRequest
1 голос
/ 13 января 2010

У меня есть хранимая процедура, которая принимает product_id и возвращает некоторые данные о продукте. Я хотел бы сделать запрос или процедуру, которая отображает этот хранимый процесс на запрос "select * from products". Есть ли способ сделать это?

Ответы [ 4 ]

2 голосов
/ 14 января 2010

Похоже, вам нужна определенная пользователем функция, а не сохраненный процесс. Пользовательская функция может быть оценена как часть запроса (например, SELECT id, myFunc (id) AS 'Product Info' FROM Products).

См. СОЗДАТЬ ФУНКЦИЮ в SQL Server BOL

Кстати, хранимым процессам разрешено быть недетерминированными, а UDF - нет. Если ваш текущий хранимый процесс недетерминирован, вам потребуется выполнить рефакторинг / пересмотр, чтобы создать пользовательские функции, которые можно включить в ваш запрос.

0 голосов
/ 15 января 2010

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

Ваше мнение будет нести ответственность за выполнение всех JOINs и сбор первичных и вспомогательных столбцов.

У вас может быть одна хранимая процедура, которая принимает product_id и возвращает набор записей для этого одного продукта. Эта процедура будет иметь что-то вроде select * from [viewname], где product_id = @ product_id.

Другая процедура вернет все. Эта процедура будет выглядеть как select * from [viewname].

0 голосов
/ 14 января 2010

Полагаю, вы могли бы определить встроенную табличную функцию и использовать ее в стиле декартовых произведений JOIN против вашей таблицы products. Такое объединение имитирует поведение «Карта», о котором вы говорите.

SELECT d.*
FROM products p JOIN getProductData(p.product_id) d

См. Встроенные пользовательские функции .

0 голосов
/ 14 января 2010

Ваша хранимая процедура принимает product_id в качестве аргумента и возвращает информацию об одном продукте. И что вы хотите сделать, это использовать эту хранимую процедуру в запросе, чтобы вы могли получить набор результатов, это правильно?

Для этого вам придется либо использовать View (если это достаточно просто сделать), либо, скорее всего, переписать хранимую процедуру как пользовательскую функцию. Если у вас есть UDF с именем GetInfoByProductId (@product_id), который возвращает набор информации об одном продукте, вы можете написать:

select product_id, dbo.GetInfoByProductId( product_id ) from products where ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...