【发布时间】:2011-03-09 15:26:06
【问题描述】:
我正在使用此查询进行分页
SELECT *
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY {0} {1}) AS RowNum, *
FROM Cars
WHERE IdOwner = {2}) AS Rows
WHERE RowNum > {3} AND RowNum < {4}
我想对 2 个表进行分页查询,而不是像现在这样只对一个表进行分页查询。
SELECT *
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY {0} {1}) AS RowNum,
Cars.Id, Cars.Make, Cars.Model, Color.Name
FROM Cars
INNER JOIN Color ON Cars.ColorId = Color.Id
WHERE IdOwner = {2}) AS Rows
WHERE RowNum > {3} AND RowNum < {4}
我收到了Incorrect syntax near the keyword 'WHERE'.
问题解决了。谢谢大家,我是个菜鸟:(
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY c.Id ) AS RowNum,
c.Id, c.Make, c.Model, d.ColorName
FROM Car AS c
INNER JOIN Color AS d
ON c.ColorId = d.Id WHERE c.IdOwner=1 ) AS Rows
WHERE RowNum > 0 AND RowNum < 11
【问题讨论】:
-
{0}..{4}的值是多少?无论如何,您都应该使用参数化查询而不是字符串连接。 -
@syrion:如果您有数百万行,您不想将所有这些都拉回客户端然后分页......
-
@syrion - 我完全不同意这一点。除了带回比您需要的更多的数据,您将如何使数组与数据库保持同步?
-
一句话:PARAMETRIZED QUERIES! - 像这样将你的命令连接在一起是一项非常危险的 任务 - SQL 注入攻击指日可待。 ....
-
@marc_s:是的。我是在一个网站的背景下思考的,在这个网站上,您最多有 200 条左右的记录。但是... @martin:无论如何,您不能在每个查询上都与数据库同步;如果您在页面之间切换时结果发生变化,那么您很可能会错过前几页的更改或在分页时跳过数据(因为它已按查询顺序移动)。
标签: .net sql sql-server ado.net mssqlft