use*_*417 5 sql sql-server select function
我正在构建我的第一个标量函数(MS SQL Server),我收到此错误:
"函数中包含的Select语句无法将数据返回给客户端."
我知道我不能使用select语句,但是如何获取信息呢?
该功能显示学生是否已经学习并通过了基础科目,并以这种方式工作:
参数id是一个通用id,它给我表student的studentid.然后,从表格主题我得到那种主题.给定kindOfSubject参数的函数getKindOfSubjectStudied将显示学生传递的主题是否是基本的.如果是,则结果为1,否则为0.
所有单独测试的查询都有效,没有错误.
下面是解释的功能代码.
非常感谢
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
USE MYDBASE
GO
CREATE FUNCTION [dbo].[getStudentHasElementary]
(
-- paramenter
@id int
)
RETURNS INTEGER
AS
BEGIN
DECLARE @Result AS INTEGER
DECLARE @return_value varchar (50)
SELECT studentsid
FROM dbo.Students
WHERE (id = id)
SELECT kindOfSubject
FROM dbo.Subjects
WHERE (studentsid = studentsid)
--- I use this function to know if the subject is elementary
EXEC @return_value = [dbo].[getKindOfSubjectStudied]
@id = id,
@kindOfSubject = kindOfSubject;
SELECT 'Return Value' = @return_value
IF (@return_value = 'elementary')
BEGIN
SET @Result = 1
END
ELSE
BEGIN
SET @Result = 0
END
RETURN @Result
END
Run Code Online (Sandbox Code Playgroud)
只需改变这一行:
SELECT 'Return Value' = @return_value
Run Code Online (Sandbox Code Playgroud)
至
RETURN @return_value;
Run Code Online (Sandbox Code Playgroud)
您还必须修改该变量的定义,int如下所示:
DECLARE @return_value int;
Run Code Online (Sandbox Code Playgroud)
或者将函数的返回值更改为varchar(50):
CREATE FUNCTION [dbo].[getStudentHasElementary]
(
-- paramenter
@id int
)
RETURNS varchar(50)
Run Code Online (Sandbox Code Playgroud)
您必须清理两个查询.尝试声明@kindofsubject变量并以这种方式编写查询:
DECLARE @kindofsubject varchar(50); -- I'm guessing here...?
-- make sure your constraints ensure only one row will be returned
-- otherwise use TOP 1 (not a great idea, really)
SELECT @kindofsubject = kindOfSubject
FROM dbo.Subjects
WHERE (studentsid = studentsid);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16651 次 |
| 最近记录: |