Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 675

Выполнение процедуры в функции которая возвращает табличное значение

10.10.2016, 16:22. Показов 2076. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Существует такой запрос:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ALTER FUNCTION [dbo].[ListMonthDateObrIskl]
(   
    @DATE   DATE
)
RETURNS TABLE 
AS
RETURN 
(
    SELECT MAX(family.key_family) AS [номер], 
        MAX(family.fio_mather) AS [ФИО матери],
        MAX(family.fio_dad) AS [ФИО отца],
        MAX(country.country) AS [Населенный пункт],
        MAX(family.addres) AS [адрес],
        MAX(family.sobstvenic) AS [собственник],
        MAX(sertificate.sertificate) AS [№ документа],
        MAX(sertificate.date_sertificate) AS [Дата включения],
        MAX(family.date_incl) AS [Дата исключения]
    FROM country INNER JOIN family ON country.key_country = family.fk_country LEFT JOIN
        kinder ON family.key_family = kinder.fk_family INNER JOIN
        sertificate ON family.fk_sertificate = sertificate.key_sertificate
    WHERE family.statusDel = 0 AND family.date_incl <= @DATE
    GROUP BY kinder.fk_family
)
Так же есть процедура обновляющая поля:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ALTER PROCEDURE [dbo].[UpdateDateIskl]
    
AS
BEGIN
    UPDATE family
    SET date_incl = dateadd(YEAR, 18, t2.date_incl)
    FROM (SELECT top 3 *
        FROM (
            SELECT top 3 *
            FROM kinder INNER JOIN family ON kinder.fk_family = family.key_family
            WHERE (YEAR(kinder.date_yuar) + 18 >= (YEAR(getdate())))
            ORDER BY kinder.date_yuar DESC) AS t1
        ORDER BY t1.date_yuar DESC) AS t2
END
Как мне выполнить сразу процедуру а потом выполнить функцию. Когда пишу:
SQL
1
2
3
4
5
6
.......
RETURN 
(
EXEC UpdateDateIskl();
    SELECT MAX(family.key_family) AS [номер], 
......
Пишет что так нельзя? Как мне исправить данную ошибку?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.10.2016, 16:22
Ответы с готовыми решениями:

Процедуры и функции: Написать функцию, которая возвращает вектор кубов в промежутке от 1 до N
У меня почему то не работает проверка: for i from 1 to 5000 do s:=i^(3) if s=27 and s=343 then s:=0 end if end do

Как из функции возвращающей табличное значение грамотно выдернуть значение и при этом сделать INSERT
В базе существует таблица с полями k0, k1, k2. Написана функция, возвращающая табличное значение типа k0, k1, k2, r0. Возвращает она всегда...

Как найти табличное значение второй функции нормального распределения
Считаю трансгрессию там нужно найти параметр \varphi (x1) Есть ли в excel функции расчета табличных значений второй функции...

7
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
10.10.2016, 16:58
Цитата Сообщение от Vla00 Посмотреть сообщение
SELECT MAX(family.key_family) AS [номер],
* * * * MAX(family.fio_mather) AS [ФИО матери],
* * * * MAX(family.fio_dad) AS [ФИО отца],
Вы в курсе, что этот запрос может выбрать вам отца и мать из совершенно разных семей? Допустим, в одной семье отец и мать оба Ивановы, а в другой отец Андреев, а мать Петрова. MAX(Иванова, Петрова) = Петрова, а MAX(Андреев, Иванов) = Иванов.
0
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 675
10.10.2016, 20:03  [ТС]
Цитата Сообщение от texnik-san Посмотреть сообщение
Вы в курсе, что этот запрос может выбрать вам отца и мать из совершенно разных семей? Допустим, в одной семье отец и мать оба Ивановы, а в другой отец Андреев, а мать Петрова. MAX(Иванова, Петрова) = Петрова, а MAX(Андреев, Иванов) = Иванов.
Так почему же у меня всё нормально отображает.
Как тогда правильно будет?
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
10.10.2016, 20:23
Цитата Сообщение от Vla00 Посмотреть сообщение
Так почему же у меня всё нормально отображает.
Два варианта:
1) Вам случаной попались "хорошие данные", на которых ошибка не проявляется
2) Это и есть правильно, вы как раз и хотели выбрать именно то, что выбирает этот запрос.

Цитата Сообщение от Vla00 Посмотреть сообщение
Как тогда правильно будет?
Понимаете, я не знаю как правильно, потому что не имею представления о том, какую вообще в реаете задачу. Может быть это и есть правильно.
Мне просто показалось, что возможно будет не лишним проговорить вслух, что именно отбирает этот запрос. Вдруг для вас это будет неожиданностью.
1
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 675
11.10.2016, 08:10  [ТС]
Цитата Сообщение от texnik-san Посмотреть сообщение
Понимаете, я не знаю как правильно, потому что не имею представления о том, какую вообще в реаете задачу. Может быть это и есть правильно.
Мне просто показалось, что возможно будет не лишним проговорить вслух, что именно отбирает этот запрос. Вдруг для вас это будет неожиданностью.
Может знаете как решить проблему которая описана выше (в шапке темы)?
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
11.10.2016, 08:20
Лучший ответ Сообщение было отмечено Vla00 как решение

Решение

Никак. Вы же создаете простую табличную функцию, да? В ней не может бть ничего, кроме оператора select.

Добавлено через 1 минуту
Выполняйте поцедуру не в функции, а там, где планируете использовать функцию, перед использованием.
1
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 675
11.10.2016, 10:22  [ТС]
Цитата Сообщение от texnik-san Посмотреть сообщение
Выполняйте поцедуру не в функции, а там, где планируете использовать функцию, перед использованием.
Была такая идея, но хотелось бы сделать такой вызов, как я сделал. Но ситуация поменялась, сказали переделать процедуру и теперь не требуется обновлять данные. так что уже не требуется вызывать функцию. Теперь буду знать что 100% нельзя так вызывать, а то не давал спокойствия этот вопрос.

Добавлено через 21 минуту
Цитата Сообщение от texnik-san Посмотреть сообщение
Никак
Можете мне еще помочь с удалением.
Есть таблица которая формируется через функцию (t1) (return table).
Есть таблица family первичный ключ key_family и таблица kinder вторичный ключ family(fk_family).
Как удалить данные из family и kinder записи которые содержаться в t1?

Добавлено через 39 минут
Цитата Сообщение от Vla00 Посмотреть сообщение
Можете мне еще помочь с удалением.
Написал вот так:
SQL
1
2
3
4
5
6
7
8
DELETE k, s
FROM kinder k 
    INNER JOIN ListMonthDateObrIskl(Getdate()) l 
        ON k.fk_family = l.номер 
    INNER JOIN sertificate s 
        ON s.sertificate = l.[№ документа]
    INNER JOIN help h
        ON h.fk_family = l.номер
Но как удалить из s? нужно много раз писать delete, т.е. такую контрукцию?
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
11.10.2016, 20:34
Vla00, вы не хотите во-первых показать схему ваших таблиц и скрипты их создания и заплнения тестовыми данными, а во-вторых рассказать, какую задачу вы пытаетесь решить всем этим кодом?

Потому что по тому коду, который вы написали, ваш замысел (чего вы хотите) понять проблемно. Начиная от вопроса, что все-таки должна выбирать табличная функция, с котоой все началась, и заканчивая вопросом, зачем в запросе вы стыкуете к вашей табличной функции аж три таблицы. Ладно, из двух вы хотите удалять (да, для удаления из каждой одной таблицы нужен отдельный запрос). А третья?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.10.2016, 20:34
Помогаю со студенческими работами здесь

Определите табличное значение функции Лапласа на уровне значимости 0,005
Определите табличное значение функции Лапласа на уровне значимости 0,005 Собсно вся суть задания. По Лапласу ниче не знаю, но если...

Написать функцию Factorial, которая возвращает значение значение факториала целого числа.
Помогите, пожалуйста, написать функцию Factorial, которая возвращает значение значение факториала целого числа. Формула: N!=1*2*3*...*N

Процедуры и функции: Почему функция ничего не возвращает?
Есть функция, высчитавающая факториал из числа. Число вводится с клавиатуры, затем результат выводится на экран. Вопрос собственно в том,...

Как прервать выполнение процедуры или функции
Имеется примерно такой код: On Error GoTo MainErr MkDir &quot;С:\A&quot; MainErr: MsgBox &quot;ОбШиБкА!!!&quot;, vbExclamation Однако, даже...

Выполнение процедуры\функции название которой введено с клавиатуры
нужен кусок кода отвечающий за то чтобы выполнялась та процедура или функция название которой будет введено пользователем.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru