![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов функции из запроса [D7, MSSQL]
Delpr © (2007-10-28 01:16:00)Здравствуйте, уважаемые мастера!
Проблема в следующем. В теле запроса вызывается хранимая функция (СУБД SQL Server 2000), которой в качестве одного из параметров передается значение поля выборки. Никак не хочет работать! Все ругается на точку (tb.field1) Может кто сталкивался, буду рад советам. Ниже сам запрос:
select
tb.Field1 as [Name1],
tb.Field2 as [Name2],
(select Field From dbo.MyFunction(tb.Field1, '01 jan 2007')) as [Name3]
From tb
Delpr (2007-10-28 02:55:00) [1]Вернуть два значения из функции, передавая ей параметры!
Johnmen (2007-10-28 02:50:00) [2]
> Delpr © (28.10.07 02:34) [7]
> Я не настаиваю на правильности моей мысли, просто я пока не вижу в ней бредовости. Если знаете как это сделать, подскажите!
Поясни, в чем мысль.
Что "это" сделать пока не ясно.
sniknik (2007-10-28 02:47:00) [3]Удалено модератором
Примечание: дубль
sniknik (2007-10-28 02:47:00) [4]> :-)
> Я больше не буду
совершенно не смешно. обсуждается именно то, и тот код который приводится. все остальное лажа, ремонт по фотографии. (при подозрении на которую, имхо, надо закрывать ветку и банить автора в назидание)
"упрощения" допустимы только тогда, когда сам автор переписал код, и получил тот же глюк на упрощенном коде, т.е. когда обсуждается именно он.
а то получается
- на сервисе говорите "у меня машина не заводится/не ездит посмотрите что с ней может быть"
- "как же не ездит вы же только что на ней приехали"
- "да не, не эта машина, а та которая у меня в гараже стоит"
- "ну так ее и привозите"
- "да я же говорю она не ездит! вы на этой посмотрите она точно такая же, цвет, колесики такие же круглые... только у этой их четыре а у той два..."
я так думаю там, вам другую машинку вызовут, из кащенко. а здесь почемуто в порядке вещей. а считаете себя программистами... умными людьми...
Delpr (2007-10-28 02:34:00) [5]To sniknik, Johnmen:
Хорошо, может я не прав. Только
> Функция возвращает таблицу, состоящую из 2 полей, запись всегда одна.
запись всегда одна, используется одно поле, а возвращается почемуто таблица (на самом рекордсет (т.е. вариант 2 в [1]) )... ресурсов не жалко?
Почему одно поле??? Функция возвращает таблицу из двух полей. Мне надо вернуть 2 значения, поэтому и выбрана таблица на выходе, которую я и читаю! Select используется толко для того, что бы указать поле, которое надо прочитать. Вообще на синтаксис запроса в целом сервер не ругается, ведь при подстановке конечного значения все работает. Мне не понятно, как в моем случае передать параметр!!!
Пример. Есть функция, которая возвращает квадрат и кубическое значение переданного ей параметра. Я, к примеру, хочу узнать квадрат и куб кода клиента. Как это сделать тогда.
Еще раз ребята! Я не настаиваю на правильности моей мысли, просто я пока не вижу в ней бредовости. Если знаете как это сделать, подскажите!
Delpr (2007-10-28 02:30:00) [6]Это не обман, просто я сейчас этот запрос тестирую, и пока выбираю только одно поле. В задаче будут выбираться два!
Delpr (2007-10-28 02:28:00) [7]To sniknik:
:-)
Я больше не буду
sniknik (2007-10-28 02:23:00) [8]вот же блин, склероз наверное уже
функция табличного типа тоже может с указанием
SELECT * FROM ::MyFunction
но тебе это не поможет.
sniknik (2007-10-28 02:21:00) [9]> может стоять только имя таблицы источника
сорри, отправил и вспомнил... есть исключение - может быть еще подзапрос.
Johnmen (2007-10-28 02:21:00) [10]Функция по определению возвращает одно единственное значение.
То, что написано в [0], бред, не зависимо от SQL сервера.
sniknik (2007-10-28 02:19:00) [11]> Да это просто пример... На самом деле используются два.
а.... ну тогда совсем другое дело! не разговариваю с врунами.
sniknik (2007-10-28 02:18:00) [12]> что желательно это сделать через функцию.
раз желательно то так и делай
> про бред я не совсем понял.
в запросе в выражении from ... может стоять толькоимя таблицы источника, не параметр не строка/переменная, не и т.д.
при дополнительных исходных данных, еще немного "бредовости"
> Функция возвращает таблицу, состоящую из 2 полей, запись всегда одна.
запись всегда одна, используется одно поле, а возвращается почемуто таблица (на самом рекордсет (т.е. вариант 2 в [1]) )... ресурсов не жалко?
Delpr (2007-10-28 02:10:00) [13]Да это просто пример... На самом деле используются два.
sniknik (2007-10-28 02:06:00) [14]> Почему одно поле???
потому, что используетсяодно поле. если не прав покажи пальцем второе в [0].
Delpr (2007-10-28 02:04:00) [15]Пользовательские функции... В литературе есть термин хранимые функции
Германн (2007-10-28 02:02:00) [16]<offtop>
Чисто для общего развития. А что помимо "хранимых процедур" есть ещё и "хранимые функции"?
</offtop>
Delpr (2007-10-28 01:53:00) [17]Честно говоря, про бред я не совсем понял. Функция возвращает таблицу, состоящую из 2 полей, запись всегда одна. Применяется во многих местах, поэтому вынесена в качестве функции. Если вместо первого параметра в запросе подставлять конкретное число, то все работает. Что делается? Есть таблица людей, таблица покупок. Так вот надо в одно поле загнать все покупки, т.е. |Иванов|Книга, ручка, тетрадь| и т.д. Так вот функция и выполняет конкатенацию значения определенного поля по указанному коду человека. Второе поле результата используется под сумму всех покупок. Ну вот так. Езе раз подчеркиваю, что желательно это сделать через функцию.
sniknik (2007-10-28 01:40:00) [18]> Может кто сталкивался
вряд ли... мало кто такой бред может выдумать...
функция это функция, а не таблица чтоб из нее from делать, она возвращает результат, значение, и в зависимости от того что она возвращает действия:
если единичное значение то просто подстановка его в нужном месте
если рекордсет то обьеденение его с общим запросом, по какомуто общему(ключевому) полю
если имя таблицы то составление динамического запроса с его участием в from и последующим выполнением
но не так как у тебя подзапрос из функции... это чтото аналогичное ремонту машины по фотографии. (или я вообще не понимаю логику того что ты привел... словами обьяснить можеш? что это у тебя делается)