我有这个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格式,但仍然没有运气。任何帮助将不胜感激。谢谢
答案 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个部分对象名称