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

Spi*_*idy 1 stored-procedures sql-server-2008

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

我的程序如下:

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);
Run Code Online (Sandbox Code Playgroud)

而我的执行声明是:

EXECUTE spDateRange @DateMin='01/11/2011', @DateMax='01/12/2011';
Run Code Online (Sandbox Code Playgroud)

我的输出是:

0
0
0
Parameters not date format
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 8

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

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

CREATE PROCEDURE spDateRange
@DateMin varchar(30) = NULL,
@DateMax varchar(30) = NULL
AS
Run Code Online (Sandbox Code Playgroud)