Как вызвать встроенную табличную функцию с выходным параметром из скалярной функции? - PullRequest
1 голос
/ 09 февраля 2009

Хотелось бы узнать, можно ли вызвать встроенную функцию с выходным параметром из скалярной функции?

Например: Моя встроенная функция называется test_1 (формат входных параметров bigint), следующий пример прекрасно работает:

ВЫБРАТЬ * ОТ MM.test_1 (4679)

Но теперь я хотел бы использовать его с выходным параметром из скалярной функции dbo.test_2 (формат выходного параметра bigint), чтобы сделать его более динамичным, но он не работает?

SELECT (SELECT * FROM MM.test_1 (dbo.test_2 (kp.id))) ОТ КП КП ГДЕ id = 4679

Я получаю следующее сообщение об ошибке:
"Ошибка в списке аргументов функции: '.' не опознано. Неполный список параметров. Отсутствует предложение FROM. Невозможно проанализировать текст запроса. "

Есть предложения?

Любая помощь будет оценена!

Thx вперед, С наилучшими пожеланиями Андреас

Ответы [ 2 ]

1 голос
/ 09 февраля 2009

Я могу интерпретировать то, что вы пытаетесь сделать, двумя разными способами.

Сценарий 1:

Вы хотите сначала получить единственное значение из таблицы kp , затем запустить его через статическую функцию, затем передать результат в встроенную функцию и получить таблицу.

В этом случае вы можете сделать что-то вроде:

declare @foo int;
set @foo = (select kp.id from kp where blahblahblah);
select * from MM.test_1(dbo.test_2(@foo))

Сценарий 2:

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

В этом случае лучшее, что я могу предложить, - это какой-то динамический SQL, который просматривает ваши значения идентификатора, используя курсор , вычисляет частичные результаты, а затем объединяет их все вместе. Google для использования курсоров для циклического перемещения по таблицам, и вы найдете достаточно, чтобы начать работу (как этот пост ). Вы должны думать о своей табличной функции как (сюрприз ...) таблица. Вы не можете использовать его в качестве столбца в операторе SELECT так же, как вы можете использовать статическую функцию, а также вы не можете передать поля запроса обратно самим себе.

Если вы вызываете этот SQL из приложения, вам следует серьезно подумать об этом вместо этого в коде.

Удачи!

0 голосов
/ 09 февраля 2009
SELECT * FROM MM.test_1(dbo.test_2(4679))

Эта часть должна работать нормально, если у вас есть табличная функция test_1 и скалярная функция test_2 . Сейчас я могу тестировать только в MSSQL 2008, но, насколько я знаю, MSSQL 2000 тоже понравится.

Как же ... что вы ожидаете от примера? Насколько я могу судить, вы выбираете вывод MM.test_1 из kp ... что не имеет смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...