2

这个功能:

CREATE FUNCTION `GetCardID`(numId INT) RETURNS int(11)
    DETERMINISTIC
BEGIN
    DECLARE retcard INT(11);
    SELECT id
    INTO retcard
    FROM cards
    WHERE `number` = numId
        AND enabled = 1
    LIMIT 1;
    RETURN retcard;
END

即使查询时也始终返回 null:

SELECT id FROM cards WHERE `number`=<Insert Value Here> AND ENABLED = 1 LIMIT 1;

为使用的相同值和函数参数返回一个有效值。

例如:
SELECT id FROM cards WHERE number=12345 AND ENABLED = 1 LIMIT 1;
-- 返回一个 id,而
GetCardId(12345);
-- 返回空值

有什么想法我在这里想念的吗?我认为自己在 SQL 方面非常熟练,但在 SP 方面有点绿色。

4

3 回答 3

1

克里斯托弗这是你的功能。试试这个,它应该工作:

CREATE FUNCTION [dbo].[GetCardID]
(  
    @Num_ID INT

)  
RETURNS int  
AS  
BEGIN  
    declare @retcard int    

    select Top 1 @retcard = id 
    FROM cards 
    where number = @num_Id
    AND enabled = 1

    return @retcard



END
于 2013-02-15T22:39:22.190 回答
1

您在功能中使用的数据有多大?这个数字是否可能大于 INT 的大小?

于 2013-02-26T20:56:20.007 回答
0

Always returns NULL

去掉DETERMINISTIC过程定义中的子句。MySQL 缓存来自此类过程或函数的响应。

摘自 MySQL:

如果一个例程对于相同的输入参数总是产生相同的结果,则该例程被认为是“确定性的”,否则被认为是“非确定性的”。如果例程定义中既没有给出 DETERMINISTIC 也没有给出 NOT DETERMINISTIC,则默认为 NOT DETERMINISTIC。要声明函数是确定性的,您必须明确指定 DETERMINISTIC

MySQL 5.5 - 创建过程或函数

于 2013-02-15T17:50:47.823 回答