日期:2014-05-18  浏览次数:20512 次

sql2000分页问题

SELECT TOP 5 *
FROM
 CrmCallinBase
WHERE
 (CallNr NOT IN (SELECT TOP ( 50* 2) CallNr FROM CrmCallinBase ORDER BY CallNr DESC))
ORDER BY
 CallNr DESC


执行报错:伺服器: 訊息 170,層級 15,狀態 1,行 7 行 7: '(' 附近的語法不正確。


------解决方案--------------------
2000的话不能直接用TOP+括号传参的方式
要用动态sql,或者你直接写100
------解决方案--------------------
拼接动态sql

exec (@sql)
------解决方案--------------------
只能轉為字符再執行
------解决方案--------------------
給你個例子參照


SQL code
DECLARE @sql NVARCHAR(4000)

SET @sql='SELECT TOP '+RTRIM(5)+' *
FROM
 CrmCallinBase
WHERE
 (CallNr NOT IN (SELECT TOP 'rtrim(50* 2)+' CallNr FROM CrmCallinBase ORDER BY CallNr DESC))
ORDER BY
 CallNr DESC'
 
 EXEC (@sql)

------解决方案--------------------
top里面不能这样 需要动态SQL执行。

转换为字符串格式的执行。