SQL Server 2005我无法从表中读取

时间:2012-06-22 11:03:52

标签: sql-server-2005

请假设在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 个答案:

答案 0 :(得分:3)

定义varchar变量的长度,如

varchar(100)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

为什么我们要获得NUll,而不是第一个字符:

如果有多个记录根据ALL_CHICKENS表中的Where子句进行过滤,那么CHICKEN_CODE列的值将从ALL_CHICKENS表的最后一行中获取。

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

答案 3 :(得分:1)

指定@input_parameter,@ myresult的长度,默认情况下varchar length为1.