【发布时间】:2017-11-02 18:31:02
【问题描述】:
BEGIN
DECLARE @SQLQuery AS NVARCHAR(MAX)
IF(@Search IS NOT NULL)
BEGIN
DECLARE @dyColumn sysname ;
IF(@Filter = 'IsNew')
BEGIN
SET @dyColumn = 'IsNew'
END
ELSE IF(@Filter = 'IsOnSale')
BEGIN
SET @dyColumn = 'IsOnSale'
END
ELSE IF(@Filter = 'IsFeatured')
BEGIN
SET @dyColumn = 'IsFeatured'
END
SET @SQLQuery = 'SELECT P.*, C.Id AS CategoryId, C.Name AS CategoryName, C.Logo AS CategoryLogo,
CO.Id AS CompanyId, CO.Name AS CompanyName, CO.Logo AS CompanyLogo, COUNT(*) OVER() TotalCount
FROM Products P
JOIN Categories C ON P.CategoryId = C.Id
JOIN Companies CO ON P.CompanyId = CO.Id
WHERE P.Name LIKE %'+@Search+'% AND '+@dyColumn+' = true
ORDER BY P.Name
OFFSET '+CAST(@PageSize AS nvarchar(100))+'*('+CAST(@PageNumber AS nvarchar(100)) +'- 1) ROWS
FETCH NEXT '+CAST(@PageSize AS nvarchar(100))+'ROWS ONLY OPTION (RECOMPILE);'
EXECUTE(@SQLQuery)
END
这是查询及其在运行时给出的错误
“2”附近的语法不正确。
FETCH 语句中选项 NEXT 的使用无效。
这意味着查询出错了
WHERE P.Name LIKE %'+@Search+'%
【问题讨论】:
-
如果选择@SQLQuery 会得到什么
-
请忽略+@dyColumn+' = true 这是+@dyColumn+' = 1
-
“2”附近的语法不正确。 FETCH 语句中选项 NEXT 的使用无效
-
查询在将参数作为列传递时导致问题
-
请显示完整的查询,包括光标。
标签: c# sql-server stored-procedures stored-functions