我有一個令人討厭的問題,我將兩個參數傳遞給存儲過程並將它們連接在一起以便在我的語句的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。 –