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

Откуда:
Сообщений: 35
Всем привет.
Есть такая функция

CREATE FUNCTION VIS_ERR(@PAT INT, @DOC INT)
RETURNS DATETIME
AS
BEGIN
DECLARE @R VARCHAR (80), @CT INT, @D DATETIME;
SELECT @CT = COUNT(dbo.visits.visit_id), patient_id, doctor_id, @D = MIN(dd) FROM dbo.visits
GROUP BY patient_id, doctor_id
HAVING doctor_id = @DOC AND patient_id = @PAT

IF @CT > 1 SET @R = @D
ELSE
SET @R = NULL;
RETURN @R
END;


При попытке выполнить пишет ошибку:
Инструкцию SELECT, которая присваивает значение переменной, нельзя использовать вместе с операциями получения данных.
Подскажите кто нибудь, куда копать?
Или есть какой альтернативный способ сформировать подобный запрос не через функцию?
Я сам на обычных языках пишу. Потому вижу решение через функцию.

Заранее спасибо.
29 фев 16, 12:43    [18876666]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
gr1047
Подскажите кто нибудь, куда копать?

Инструкцию SELECT, которая присваивает значение переменной, нельзя использовать вместе с операциями получения данных.

Вы определитесь, что вы в SELECT хотите делать - то ли присваивать переменным значения, то ли данные возвращать
29 фев 16, 12:45    [18876688]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
gr1047
Member

Откуда:
Сообщений: 35
Glory
gr1047
Подскажите кто нибудь, куда копать?

Инструкцию SELECT, которая присваивает значение переменной, нельзя использовать вместе с операциями получения данных.

Вы определитесь, что вы в SELECT хотите делать - то ли присваивать переменным значения, то ли данные возвращать


Мне надо сначала данные вернуть, а потом их присвоить. Можно это в рамках одной функции сделать?
29 фев 16, 12:48    [18876706]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
gr1047
Мне надо сначала данные вернуть, а потом их присвоить.

Вы сообщение об ошибке прочитали ?
"нельзя использовать вместе с операциями получения данных." тоже прочитали ?

gr1047
Можно это в рамках одной функции сделать?

Дело не в функции. Без функции ваш запрос будет генерировать такую же ошибку.
29 фев 16, 12:50    [18876725]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
gr1047
Member

Откуда:
Сообщений: 35
Glory, прочитал. И как-то приуныл. А как в таком случае быть? Такую функцию в принципе на ms sql не написать?
29 фев 16, 12:51    [18876740]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
gr1047
Member

Откуда:
Сообщений: 35
Мне функция нужна, какая будет определять количество вхождений и дату первого. Может чего присоветуете?
29 фев 16, 12:53    [18876764]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
gr1047
Glory, прочитал. И как-то приуныл. А как в таком случае быть?

Выбрать уже, что должен делать ваш SELECT.
Выбрать можно одно из двух - присвоение или возрат данных

gr1047
Такую функцию в принципе на ms sql не написать?

Мда. И еще раз - проблема не в функции.
29 фев 16, 12:54    [18876767]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
gr1047
Member

Откуда:
Сообщений: 35
Glory, я понял что не в функции. Подскажите как средствами ms sql решается подобная задача. Буду весьма признателен.
29 фев 16, 12:58    [18876814]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
gr1047
Подскажите как средствами ms sql решается подобная задача.

Млин
Путем написания правильного SELECT
Правильный SELECT - это SELECT в котором, либо только переменным присваиваются значения, либо вообще не присваиваются
29 фев 16, 13:00    [18876833]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
gr1047
Member

Откуда:
Сообщений: 35
Glory, правильного select в функции?
29 фев 16, 13:01    [18876841]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
gr1047
правильного select в функции?

Правильного select-а везде
29 фев 16, 13:02    [18876844]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT-то в первом сообщении непростой...

GROUP BY patient_id, doctor_id
HAVING doctor_id = @DOC AND patient_id = @PAT
- это шедевр!

Надежда только на то, что сервер не дурак.
29 фев 16, 13:09    [18876901]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
gr1047
Member

Откуда:
Сообщений: 35
iap, а в чём ошибка?
29 фев 16, 13:10    [18876918]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
gr1047
Member

Откуда:
Сообщений: 35
iap, мне нужно посчитать вхождение пары доктор-пациент в базу. Что не так?
29 фев 16, 13:12    [18876926]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
gr1047
мне нужно посчитать вхождение пары доктор-пациент в базу. Что не так?

Все так, за исключением того, а зачем GROUP BY и HAVING
Ну и собственно начала SELECT-а.
А в оставшемся - все хорошо.
29 фев 16, 13:13    [18876942]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
gr1047
Member

Откуда:
Сообщений: 35
Glory, всё понял... ))) Спасибо.
29 фев 16, 13:14    [18876951]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
gr1047
iap, мне нужно посчитать вхождение пары доктор-пациент в базу. Что не так?
Если не останавливаться на том, что вам говорит сервер (и Glory),
то надо выкинуть то, что я процитировал, и написать нормальное условие в WHERE.
29 фев 16, 13:15    [18876952]     Ответить | Цитировать Сообщить модератору
 Re: Не могу присвоить переменным данные из запроса в функции. MS SQL  [new]
gr1047
Member

Откуда:
Сообщений: 35
iap, всё переписал. Огромное спасибо )). Чёт затупил...
29 фев 16, 13:17    [18876971]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить