2015-09-29 70 views
4

我已經寫了,如果日期差異已經大於或等於30返回值不能在此背景下

這裏,返回1的功能被使用的是我的代碼:

DECLARE @flag int 
DECLARE @isactive bit 
DECLARE @date Datetime 

SET @flag = 0 

SELECT @isactive = [m_isactive] 
FROM dbo.rms_month_email 
WHERE m_id = 3 

SELECT @date = [m_createddate] 
FROM dbo.rms_month_email 
WHERE m_id = 3 

IF (@isactive = 1 AND DATEDIFF(dd,@date,GETDATE()) = 30) 
    SET @flag = 1 

RETURN @flag 

但它產生了這個錯誤:

Msg 178, Level 15, State 1, Line 16
A RETURN statement with a return value cannot be used in this context.

這是什麼意思?

CREATE FUNCTION [dbo].[udf_isBonus] 
(@m_id AS INT) 
RETURNS INT 
AS 
BEGIN 
    -- Declare the return variable here 
    DECLARE @flag AS int 
    DECLARE @isactive AS bit 
    DECLARE @date AS Datetime 

    SET @flag = 0 

    SELECT @isactive = [m_isactive] FROM dbo.rms_month_email WHERE m_id = @m_id 
    SELECT @date = [m_createddate] FROM dbo.rms_month_email WHERE m_id = @m_id 

    IF (@isactive = 1 AND DATEDIFF(dd,@date,GETDATE()) = 30) 
     SET @flag = 1 

    RETURN @flag 
END 
GO 

這是這個函數的整個代碼。

+0

如何提供所有的功能與'CREATE FUNCTION名稱...' 。看起來你有不正確的語法。 –

+0

這裏我沒有看到函數的定義。如果你想在批處理中測試一個函數的主體,使用'SELECT @ flag'而不是'RETURN'。 – Pred

+1

我看到這個功能沒有錯誤。關閉投票 –

回答

4

您需要明白Return只能在函數或存儲過程中使用。如果你沒有在函數或存儲過程中使用它,那麼它只是一批選擇語句。所以你需要使用select而不是return

SQL DEMO

編輯:

你編輯你修改了它之後的函數工作完全正常。

SQL DEMO

1

嘗試使用CASE代替IF和刪除SET @flag = 0

USE [petc_rms] 
GO 

/****** Object: UserDefinedFunction [dbo].[udf_isBonus] Script Date:  9/29/2015 3:35:49 PM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 


CREATE FUNCTION [dbo].[udf_isBonus] 
(
-- Add the parameters for the function here 

    @m_id AS INT 

) 
RETURNS INT 
AS 
BEGIN 
-- Declare the return variable here 
DECLARE @flag AS int 
DECLARE @isactive AS bit 
DECLARE @date AS Datetime 


    SELECT @isactive = [m_isactive] FROM dbo.rms_month_email WHERE m_id = @m_id 
    SELECT @date = [m_createddate] FROM dbo.rms_month_email WHERE m_id = @m_id 

    SET @flag = CASE WHEN @isactive = 1 AND DATEDIFF(dd,@date,GETDATE()) = 30 THEN 1 ELSE 0 END  

Return @flag 

END 

GO 

檢查即將CREATE FUNCTION

+1

那裏有什麼不正確? –

+0

@IamGlads現在試着檢查。 –

+0

非常感謝!所以我在國旗上遇到了問題。再次感謝你。 –