我已获得以下SQL代码
CREATE PROC [dbo].[GetMessages]
(
@dateFrom DATETIME = null,
@dateTo DATETIME = null,
@messageType NVARCHAR(100) = null,
@freeText NVARCHAR(255) = null,
@freeTextSearch BIT,
@maxRecords INT = 500
)
AS
DECLARE @sqlstr NVARCHAR(1000)
SET @sqlstr = N'SELECT TOP @maxRecords ma.*, mp.*
FROM MessageData ma
LEFT JOIN MessagePages mp
ON ma.id=mp.id
WHERE 1=1 '
IF @dateFrom <> NULL AND @dateTo <> NULL
BEGIN
@sqlstr = @sqlstr + N' AND ma.created BETWEEN @dateFrom AND @dateTo'
END
IF @messageType <> NULL
BEGIN
@sqlstr = @sqlstr + N' ma.msgtype = @messageType'
END
IF @freeTextSearch = '1'
BEGIN
@sqlstr = @sqlstr + N' CONTAINS(msgdata, @freeText)', 100
END
BEGIN
@sqlstr = @sqlstr + N'ORDER BY ma.id DESC'
END
EXEC sp_executesql @sqlstr, N'@dateFrom DATETIME = null,
@dateTo DATETIME = null,
@messageType NVARCHAR(100) = null,
@freeText NVARCHAR(255) = null,
@freeTextSearch BIT,
@maxRecords INT = 500'
但是,在我尝试附加到Query的所有IF语句中,它给出了以下内容:
Msg 102,Level 15,State 1,Procedure GetMessageV2,Line 22
&#39; @ sqlstr&#39;附近的语法不正确。
我尝试过各种各样的事情,但我根本无法解决这个问题。 任何帮助表示赞赏。
答案 0 :(得分:4)
您必须在所有 SET
语句中使用IF
,例如:
IF @messageType <> NULL
BEGIN
SET @sqlstr = @sqlstr + N' ma.msgtype = @messageType'
END
此外,,100
之后CONTAINS
在语法上不正确。我不确定你想要在那里实现什么。
答案 1 :(得分:2)
我认为错误就在这一行
@sqlstr = @sqlstr + N' CONTAINS(msgdata, @freeText)', 100
您只需删除,100
希望这有帮助