我一直在尝试复制SQL Server中MySql中提供的限制和范围功能,但还没有运气。我找到了几个指南,现在认为我的sql代码几乎是正确的,但我仍然在下面发布了一个错误。
System.Data.SqlClient.SqlException: 只能指定一个表达式 在子查询中的选择列表中 没有引入EXISTS
错误代码说要使用EXISTS,但我尝试过而不是NOT IN,我仍然会收到错误。
我的sql发布在
下面SELECT TOP (@range) *
FROM client
WHERE clientId NOT IN
(SELECT TOP (@limit) *
FROM client
ORDER BY clientId)
ORDER BY clientId
答案 0 :(得分:3)
您需要对代码进行更改
SELECT TOP (@range) *
FROM client
WHERE clientId NOT IN (SELECT TOP (@limit) clientId /*<-- NOT "*" here */
FROM client
ORDER BY clientId)
ORDER BY clientId
这也可以通过使用如下row_number
来完成(效果更好取决于可用的不同索引以及整个查询的覆盖索引与仅clientId
上的窄索引的比较宽度。)
DECLARE @lowerlimit int
SET @lowerlimit = @range +@limit;
WITH cte As
(
SELECT TOP (@lowerlimit) * , ROW_NUMBER() OVER (ORDER BY clientId) AS RN
FROM client
ORDER BY clientId
)
SELECT * /*TODO: Your Actual column list*/
FROM cte
WHERE RN >= @limit
答案 1 :(得分:0)
另一种(类似的,慢的:))方式
SELECT * FROM (
select rank() over (ORDER BY yourorder) as rank, *.X
from TableX X
) x2 WHERE rank between 5 and 10