使用返回 int 的函数时出现问题

Posted

技术标签:

【中文标题】使用返回 int 的函数时出现问题【英文标题】:Problem using a function that returns int 【发布时间】:2020-07-16 15:37:42 【问题描述】:

这是一个非常简单的函数,可以按名称返回学生 ID。该函数有效,但我无法使用它:

--function to find student id by name (works)
create function findStudent (@name nvarchar(15), @familyName nvarchar(15))
returns tinyint
as
begin
    declare @id tinyint
    select @id = (select teaID from Tea where teaFirstName = @name and teaLastName = @familyName)
    return @id
end;

--using the function (doesn't work)
declare @id tinyint
select @id = (execute findStudent 'Arash', 'Mitooie')
print @id

【问题讨论】:

您在哪里找到execute 一个函数或您传递不带括号的参数的示例语法?试试SELECT @id = dbo.findStudent(N'Arash'. N'Mitooie'); 【参考方案1】:

你有一个功能。无需执行。只需将其插入select

declare @id tinyint;
select @id = dbo.findStudent('Arash', 'Mitooie');
print @id;

您也可以将其定义为存储过程。在这种情况下,我建议将@id 作为OUTPUT 参数传递并在过程中分配值。

您还应该查看存储过程和存储函数之间的区别,因为您似乎混淆了两者。在最简单的情况下,存储函数返回单个值或结果集,并且旨在用于查询。查询中不能使用存储过程(insert除外,某些特殊情况我不推荐使用)。

【讨论】:

谢谢戈登。我确实打算在查询中使用它,但不幸的是它也不能按照你的方式工作。 . .顺便说一句:SQL 中所有这些分号都是必需的吗? @Arash 不,它们在今天不是绝对必要的,但它们可能有一天会出现,所以这只是一个好主意。 See this post。另请回复:dbo. 前缀请参阅this one。 “不像你写的那样工作”是什么意思? @ArashMitooie 。 . .这是因为函数必须在 SQL Server 中包含架构名称。 实际上你可以执行函数,对于exec,模式不是必需的。我不建议这样做。 ***.com/questions/5207036/… @Gordon, @Aron 谢谢大家。函数名之前的dbo. 解决了它。

以上是关于使用返回 int 的函数时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

在创建掩码返回案例语句中使用非确定性函数时出现问题

尝试使用 C qsort 函数时出现问题

从成员函数打印 vector<int> 元素时出现 C++ 段错误

使用基类中定义的函数返回指向派生类实例的指针时出现无效转换错误

为啥函数调用在 swiftui 中返回不可变值时出现错误?

当C ++将元素从函数的返回值存储到std :: vector时出现意外的结果