【发布时间】:2014-08-16 10:34:28
【问题描述】:
我对动态程序很陌生,希望这里有人可以帮助我解决以下问题。
看来我的问题在于 Where 子句的 AND 部分。我在这里没有收到错误 - 它只是不返回任何结果。
编辑:我的动态列名将是“R.@searchCategory”。
到目前为止我的程序:
ALTER PROCEDURE [dbo].[FetchRequests]
@searchCategory nvarchar(100) = '',
@searchTerm nvarchar(256) = ''
AS
BEGIN
BEGIN
DECLARE @sql nvarchar(max)
SET @sql = 'SELECT TOP 100
R.logID,
R.flag,
R.reviewer,
R.modBy,
A.Email AS requesterEmail,
B.Email AS approverEmail,
L.locale AS region,
L.country AS countryName
FROM LogRequests R
LEFT JOIN EmpTable A
ON A.NTID = R.requester
LEFT JOIN EmpTable B
ON B.NTID = R.approver
INNER JOIN Locales_Countries L
ON R.country = L.isoCode
WHERE (R.logStatus LIKE ''%Completed%'' OR R.logStatus LIKE ''%Closed%'')
AND R.' + @searchCategory + ''' LIKE ''%' + @searchTerm + '%''
ORDER BY R.dateNeeded desc, R.dateRec desc, R.prio desc, R.EID desc
FOR XML PATH(''requests''), ELEMENTS, TYPE, ROOT(''ranks'')'
EXEC(@sql)
END
END
非常感谢,迈克。
【问题讨论】:
-
我很惊讶这会执行 - 你有一个额外的单引号,就在 @searchCategory 之后应该使语句抛出语法异常。此外,你真的很容易受到 SQL 注入攻击......
标签: sql sql-server stored-procedures dynamic