2012-06-22 51 views
0

阅读请假设在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 

为什么?

预先感谢您的友好合作。

回答

3

定义为varchar变量的长度,这样

varchar(100) 

没有100(或任何长度您选择),其lengh是1where子句将筛选出正确的结果。

+1

31秒。 :-) –

+0

非常感谢,你很棒;-) – UltraCommit

2

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

1

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

为什么我们越来越空,而不是第一个字符:

如果有多个记录被过滤上的ALL_CHICKENS表然后CHICKEN_CODE列的值是从最后一排ALL_CHICKENS拿起Where条款基础表。

看起来最后一行在CHICKEN_CODE列中有空值。

1

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