2011-12-16 18 views
4

我建立我的第一個標量函數(MS SQL服務器),我得到這個錯誤:SQL標量函數,如何不使用select語句

「包含一個函數內不能將數據返回到客戶端Select語句。 「

我明白我不能使用select語句,但是如何獲取信息呢?

功能將顯示,如果學生已研究並通過基本科目,並以這種方式工作:

參數ID是一個通用ID這使我從學生表的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 
+0

我假設MS SQL Server? – MatBailie 2011-12-16 14:03:36

+0

這是功課嗎? – Aaron 2011-12-16 14:04:52

回答

5

只是改變這一行:

SELECT 'Return Value' = @return_value 

RETURN @return_value; 

你也必須修改變量的定義,或者是int像所以:

DECLARE @return_value int; 

或改變功能的這樣的返回值varchar(50)

CREATE FUNCTION [dbo].[getStudentHasElementary] 
( 
    -- paramenter 
    @id int 
) 
RETURNS varchar(50) 

你必須清理你的兩個查詢。嘗試聲明@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);