使用返回 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 的函数时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
从成员函数打印 vector<int> 元素时出现 C++ 段错误