我有一个令人讨厌的问题,我将两个参数传递给存储过程并将它们连接在一起以便在我的语句的WHERE子句中使用。第一个参数用于等号表达式,而第二个用于形成AND子句。存储过程在where子句中连接两个参数
存储过程的下面的提取,显示了我正在尝试做什么。
Declare @CombinedWhereClause varchar(500), @Sender varchar(10), @AndClause char(200)
Set @Sender = 'Wayne';
Set @AndClause = ' AND Convert(varchar(8), MessageDate, 112) < DATEADD(day, -10, GETDATE())';
Set @CombinedWhereClause = @Sender + @AndClause;
SELECT Messages.Id, Messages.IdExternal, Messages.MessageReference,
FROM Messages
WHERE Messages.Sender [email protected]
如果我用@Sender替换@CombinedWhereClause,那么我就会找回预期的记录。如果我将where子句更改为:
WHERE Message.MessageDate Convert(varchar(8), MessageDate,112) < DATEADD(day, -10, GETDATE())
然后我得到所有10天的记录。但是,当我结合时,我得不到任何结果。
请标记的DBMS。 (这是产品特定的代码。) – jarlh
哪个RDBMS(供应商和版本)?你真的期望,数据库引擎可以知道,你比较的字符串不是一个字符串,而是一个where子句的扩展名?这只可能与动态SQL ... – Shnugo
我假设SQL服务器,因为'getdate()'和'convert()'语法。无论如何,我不知道可以结合常规sql和动态sql的rdbms。 –