请假设在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
为什么?
提前感谢您的合作。
答案 0 :(得分:3)
定义varchar变量的长度,如
varchar(100)
如果没有100
(或您选择的任何长度),其长度为1
,where
子句将过滤掉正确的结果。
答案 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.