Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
2 / 2 / 0
Регистрация: 31.07.2017
Сообщений: 54

Недопустимое использование оператора "PRINT", оказывающего побочное действие, в функции

23.02.2018, 09:11. Показов 5762. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Функция должна считать факториал, но выводит ошибку:
Сообщение 443, уровень 16, состояние 14, процедура factorial, строка 13
Недопустимое использование оператора "PRINT", оказывающего побочное действие, в функции.


И как можно реализовать проверку на некорректно введенные данные. Например вместо целого числа пользователь ввел текст
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE FUNCTION factorial(@d INT)
RETURNS INT
BEGIN
DECLARE @RES INT,@t INT
SET @RES=1 
SET @t=1
 
IF (@d>12 OR @d<0)
    BEGIN
        PRINT 'Факториал числа должен быть меньше 12 и больше 0'
    END 
ELSE
    BEGIN
    WHILE @t<=@d
        BEGIN
        SET @RES=@RES*@t
        SET @t=@t+1
        END
    END
 
RETURN @RES
 
END
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.02.2018, 09:11
Ответы с готовыми решениями:

Верно ли утверждение: « действие оператора continue; в приведенных ниже примерах эквивалентно действию оператора goto next; ».
Помогите пожалуйста ответить на вопрос,если можно с примером;Верно ли утверждение: « действие оператора continue; в приведенных ниже...

Использование функции вместо встроенного оператора сравнения в multiset
Вместо обычного оператора (&lt;) можно использовать свой тип оператора, но что-то у меня не компилируется. using namespace std; ...

Использование оператора ветвления if с условием логической функции boolean типа
Проверка на положительность

3
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
23.02.2018, 09:45
Лучший ответ Сообщение было отмечено Tasen как решение

Решение

Насколько я знаю print нельзя использовать в пользовательских функциях.
Кроме того я бы рекомендовал осуществляйте проверку до вызова функции (лучше всего в GUI приложения). Это будет правильно, потому, что по идее функции вычисляющая факториал не должна делать ничего кроме вычисления факториала.
1
2 / 2 / 0
Регистрация: 31.07.2017
Сообщений: 54
23.02.2018, 10:20  [ТС]
_katon_, а что нужно чтобы реализовать проверку на некорректно переданные значения функции? Вот например передано значение типа nvarchar, вместо int
0
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
23.02.2018, 11:21
Лучший ответ Сообщение было отмечено Tasen как решение

Решение

Цитата Сообщение от Tasen Посмотреть сообщение
CREATE FUNCTION factorial(@d INT)
Цитата Сообщение от Tasen Посмотреть сообщение
Вот например передано значение типа nvarchar, вместо int
У вас в функции указан тип int. Попробуйте вызвать ее передав строку. У вас скорее всего будет ошибка конвертации типов. Т.е. то, что вы указали для входного параметра тип int уже является проверкой.

Для того чтобы проверить от 1 до 13. Дополнительно показал как пользоваться try_CONVERT (альтернатива try_cast)
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
alter FUNCTION factorial(@d INT)
RETURNS INT
BEGIN
DECLARE @RES INT,@t INT
IF (@d<12 and @d>0) 
    BEGIN
    SET @RES=1
    SET @t=1
 
    WHILE @t<=@d
        BEGIN
        SET @RES=@RES*@t
        SET @t=@t+1
        END
    END
 
RETURN @RES
 
END
 
go 
 
declare @result int;
select @result = dbo.factorial(0)
 
if(@result is null)
begin 
    print N'Значение передоваемое в функцию должно быть в пределах от 1 до 11'
end 
 
go 
 
declare @result int;
declare @arg nvarchar(50)
set @arg = 'bbbb';
 
declare @intArg int
set  @intArg = try_CONVERT(int, @arg);
 
set @result = dbo.factorial(@intArg)
select @result
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2018, 11:21
Помогаю со студенческими работами здесь

Использование оператора ветвления if с условием логической функции boolean типа
Проверка на положительность

Использование условного оператора после оператора цикла
Даны целые числа a1, a2, ..., a9. Верно ли, что их сумма есть четное число? Помогите написать программу на Си

Недопустимое использование типа в качетве выражения С++
Добрый вечер всем! Не могу понять в чем проблема. Задача такова: создать клас для хранения БД (тел. справочник). Создать производный...

Направление вывода оператора print в файл и на экран одновременно
Добрый день! Каким образом осуществить вывод через оператор «print» в файл и на экран одновременно. В представленном куске кода...

Firedac и MSAccess - недопустимое использование скобок с именем
Есть запрос: UPDATE USERSIN SET USERSIN.=&quot;Полное имя&quot;, USERSIN.=&quot;почта@до.мен&quot;, USERSIN.=&quot;номер телефона&quot;,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru