在SP抛出Error-sql server 2008时不向参数提供值

时间:2016-10-25 13:48:48

标签: sql sql-server

我有一个SP,如下所示。

CREATE PROCEDURE CHKIndex

@count DECIMAL(10,2) ,
@ID INT = NULL, 
@DATE VARCHAR (MAX)

AS

SELECT  DISTINCT
       COL1,
       COL2
FROM
(    
      SELECT COL1,COL2,rn
      FROM TAB1 T1 
      INNER JOIN TAB2 T2 ON T1.SNO = T2.PNO
)t
where t.rn = 1
AND DATE = @DATE
AND t.ID = @ID

GO

当我按EXEC CHKIndex 20,71,22082016

执行时

当我为所有三个参数

提供值时工作正常

但 如果没有提供任何日期值

,则开始给出错误
  

过程或函数'uspECP_Competitive_Index'需要参数'@DATE',这是未提供的。

我试图以这样的方式修改:如果用户想要仅基于@count和@ID查看数据 他们能够这样做。

如果为@date分配默认NULL,甚至不在输出中获取任何记录。

请建议。

1 个答案:

答案 0 :(得分:1)

快速而肮脏的方法可能是将where子句修改为:

WHERE
    t.rn = 1
AND DATE = ISNULL(@DATE, DATE)
AND t.ID = @ID

其他几点要注意

  1. 您没有使用参数@count
  2. 对@Date参数使用datetime类型更有意义,而不是varchar(max)。