如何在存储过程中正确选择WHERE EFF_Date> ='Given_Date'?

时间:2014-04-14 19:32:47

标签: sql sql-server tsql stored-procedures

我有这个select语句,它返回我正在寻找的结果:

SELECT *
FROM Database.dbo.Table
WHERE Effective_Date >= '04/01/2014'
AND Chain = 'MCD'

我希望将其转换为具有以下变量@EffectiveDate和@Chain的存储过程,以便我可以简单地替换日期和链以获得不同的结果。以下是我所做的存储过程无法正常工作:

CREATE PROCEDURE Database.dbo.StoredProc
    @Chain VARCHAR(255),
    @EffectiveDate VARCHAR(255)
AS
     SELECT *
     FROM Database.dbo.Table
     WHERE Effective_Date >= '+@EffectiveDate+'
     AND Chain = '+@Chain+'
GO

我想像这样执行这个存储过程:

EXEC Database.dbo.StoredProc
@PharmacyChain = N'MCD',
@EffectiveDate = N'04/01/2014'
;
GO

在此示例中,Table.Effective_Date采用日期时间格式。当我运行带有存储过程的SELECT语句时,日期比较可以正常工作,只选择在' 04/01/2014'之后生效日期的记录。但是,当它使用存储过程中的变量int运行时,它并没有正确地将日期转换为比较。我尝试将EffectiveDate变量更改为datetime格式,但仍然没有运气。任何帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:2)

参数应与列数据类型

匹配
 @Chain VARCHAR(255) -- what is Chain?
 @EffectiveDate datetime -- or date etc

只需这样做

 SELECT *
 FROM dbo.Table
 WHERE Effective_Date >= @EffectiveDate 
 AND Chain = @Chain;

您不需要3个部分对象名称