我遇到了一个恼人的问题,我将两个参数传递给存储过程并将它们连接在一起,以便在我的语句的WHERE子句中使用。第一个参数用于equals表达式,而第二个参数用于形成AND子句。
存储过程的以下摘录显示了我正在尝试做的事情。
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 =@CombinedWhereClause
如果我只用@Sender替换@CombinedWhereClause,那么我会收回预期的记录。如果我将where子句更改为:
WHERE Message.MessageDate Convert(varchar(8), MessageDate,112) < DATEADD(day, -10, GETDATE())
然后我得到所有10天的记录。但是,当合并时我没有结果。
答案 0 :(得分:0)
在你的陈述中有几个缺陷:
WHERE Messages.sender=Wayne
,但需要引号...='Wayne'
尝试这种动态方法(SQL Server语法)
Declare @CombinedWhereClause varchar(500), @Sender varchar(10), @AndClause char(200)
Set @Sender = '''Wayne'''; --you need to wrap the word in quotes!
Set @AndClause = ' AND Convert(varchar(8), MessageDate, 112) < DATEADD(day, -10, GETDATE())';
Set @CombinedWhereClause = @Sender + @AndClause;
DECLARE @cmd VARCHAR(MAX)=
'SELECT Messages.Id, Messages.IdExternal, Messages.MessageReference
FROM Messages
WHERE Messages.Sender =' + @CombinedWhereClause;
--check the command
SELECT @cmd;
--if the command is OK you might execute it
--EXEC(@cmd);