SQL存储过程参数是否已损坏?

时间:2011-03-21 16:09:30

标签: sql-server-2008 stored-procedures

我有一个存储过程,现在只是假设您将字符串输入验证为有效日期。我已经尝试在程序之外运行它并且它完美无缺,但是只要我将它粘在一个过程中,参数就会变为零。

我的程序如下:

CREATE PROCEDURE spDateRange
@DateMin varchar = NULL,
@DateMax varchar = NULL
AS
PRINT @DateMin;
PRINT @DateMax;
IF @DateMin IS NOT NULL AND @DateMax IS NOT NULL
    BEGIN
    PRINT @DateMin;
    IF(ISDATE(@DateMin)=1 AND ISDATE(@DateMax)=1)
        PRINT 'Valid Date';
    ELSE
        RAISERROR('Parameters not date format', 10, 1);
    END
ELSE
    RAISERROR ('Invalid parameters', 10, 1);

我的执行声明是:

EXECUTE spDateRange @DateMin='01/11/2011', @DateMax='01/12/2011';

我的输出是:

0
0
0
Parameters not date format

1 个答案:

答案 0 :(得分:8)

您需要为varchar参数指定明确的长度。默认为1个字符。

char(10)对于dd/mm/yyyy格式的有效日期应该足够了,但我想您可能需要更长时间,因为这可能会验证可能无效的日期!

CREATE PROCEDURE spDateRange
@DateMin varchar(30) = NULL,
@DateMax varchar(30) = NULL
AS