Sql server 在sql中创建函数时出错
大家好,我正在尝试使用上述语法创建一个获得第二高工资的sql函数,但我遇到了错误: “函数中包含的Select语句无法将数据返回到客户端。” 任何人都可以告诉我写函数的实际语法是什么,或者用正确的语法返回我的代码。提前感谢。我要写的是使用以下方法:Sql server 在sql中创建函数时出错,sql-server,sql-server-2008,Sql Server,Sql Server 2008,大家好,我正在尝试使用上述语法创建一个获得第二高工资的sql函数,但我遇到了错误: “函数中包含的Select语句无法将数据返回到客户端。” 任何人都可以告诉我写函数的实际语法是什么,或者用正确的语法返回我的代码。提前感谢。我要写的是使用以下方法: CREATE FUNCTION Salary.SecondHighestSalary() Returns int AS BEGIN Declare @salary int; SELECT TOP 1 salary FRO
CREATE FUNCTION Salary.SecondHighestSalary()
Returns int
AS
BEGIN
Declare @salary int;
SELECT TOP 1 salary FROM (
SELECT TOP 2 salary FROM Salary
ORDER BY salary DESC
) as maxsalary ORDER BY salary ASC
Return @salary
END
CREATE FUNCTION Salary.SecondHighestSalary()
Returns int
AS
BEGIN
Declare @salary int;
SELECT TOP 1 @salary = salary FROM (
SELECT TOP 2 salary FROM Salary
ORDER BY salary DESC
) as maxsalary ORDER BY salary ASC
Return @salary
END
如果您需要处理例如领带(切换到或视情况而定),而
TOP
和ORDER BY
方法不太适合处理领带,则可以方便地对其进行调整。非常感谢,这确实对我有帮助。我能够成功构建功能,但现在,当我尝试使用:SELECT*FROM SecondHighestSalary()执行此操作时,它给出了一个错误:无效的对象名称“SecondHighestSalary”。请给出建议。您在工资模式中定义了此项。此外,您还定义了标量函数,而不是表值函数,因此您的调用语法需要有所不同。尝试运行select Salary.SecondHighestSalary()
No,我在创建函数时更改了一些语法:CREATE function SecondHighestSalary()这是我的函数名,现在没有使用任何模式。如果调用SELECT SecondHighestSalary(),则会出现以下错误:“SecondHighestSalary”不是可识别的内置函数名。@user2289490-调用标量UDF时必须包含架构名。因此,如果它不再在Salary
中,那么它可能在dbo
中。
CREATE FUNCTION SecondHighestSalary()
Returns int
AS
begin
Return (
select salary from (
select salary,ROW_NUMBER() OVER (ORDER BY salary desc) as rn
from Salary
) t
where rn = 2);
END