0

请假设在 SQL Server 2005 中,如果您启动以下查询:

SELECT CHICKEN_CODE FROM ALL_CHICKENS WHERE MY_PARAMETER = 'N123123123';

您获得:

31

结果。

现在,我想编写一个函数,给定 的值MY_PARAMETER,产生对应的值CHICKEN_CODE,在表中找到ALL_CHICKENS

我在 SQL Server 2005 中编写了以下存储函数:

ALTER FUNCTION [dbo].[determines_chicken_code]
(
    @input_parameter                         VARCHAR 
)
RETURNS varchar
AS 
BEGIN
    DECLARE @myresult varchar

    SELECT @myresult  =  CHICKEN_CODE
    FROM dbo.ALL_CHICKENS
    WHERE MY_PARAMETER = @input_parameter

    RETURN @myresult
END

但是,如果我启动以下查询:

SELECT DBO.determines_chicken_code('N123123123') 

它产生:

NULL

为什么?

预先感谢您的友好合作。

4

4 回答 4

3

像这样定义 varchar 变量的长度

varchar(100)

如果没有100(或您选择的任何长度),它的长度是1并且该 where子句将过滤掉正确的结果。

于 2012-06-22T11:07:56.790 回答
2

为您的 varchar 指定一个长度(例如:varchar(100))。没有长度,varchar = 1 char。

于 2012-06-22T11:08:26.683 回答
1

根据其他 PS,您只能在 @myresult 中存储一个字符,因为您没有指定任何长度,bcoz 1 char 长度是 Varchar 数据类型的默认值。

为什么我们得到 NULL,而不是第一个字符:

如果根据 ALL_CHICKENS 表中的Where子句过滤了多条记录,则从 ALL_CHICKENS 表的最后一行中提取 CHICKEN_CODE 列的值。

似乎最后一行在 CHICKEN_CODE 列中具有空值。

于 2012-06-22T11:14:15.060 回答
1

指定 @input_parameter 的长度,@myresult 默认 varchar lengh 为 1。

于 2012-06-22T11:25:48.137 回答