我有一个我维护的遗留网站(主要使用vbscript构建在经典ASP中)。我正在对它进行一些修改,并且厌倦了每次等待5分钟我必须通过其中一个从数据库加载99000条记录的页面,然后才显示前20条,所以我重写了代码:
sSQL = "WITH OrderedAgreements AS (SELECT *, ROW_NUMBER() OVER (ORDER BY " & strSort & ") AS 'RowNumber' FROM ServiceAgreement " & WhereClause & ")"
sSQL = sSQL & " SELECT * FROM OrderedAgreements WHERE RowNumber BETWEEN " & iStartRec & " AND " & iStartRec + iPageSize - 1
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sSQL, SQLConn, adOpenStatic, adLockReadOnly
(目标是只返回实际显示的行)。
在本地开发计算机(Windows 7)上从IIS-7运行时运行正常。它正在相邻实验室的开发服务器上访问SQL Server 2008下的测试数据库。
但是,当我在生产服务器上的测试版网站中运行相同的代码时(即,通过不同的HTTP端口访问生产站点的并行目录树),它会给我一个“关键字'附近的语法错误'WITH ““
生产服务器正在运行Windows Server 2003 R2和IIS 6,但我想不出为什么这会导致一台机器出错而另一台机器出错的原因。它们运行相同的代码,连接到同一个数据库,使用相同的命令序列进行访问。我甚至将一些日志代码输入到输出正在生成的SQL中,并且在两种情况下都是相同的。两台机器都运行2.0 / 3.0 / 3.5框架。两台机器都安装了SQL Server 2008。
我可以访问生产服务器(通过RDP),但它上面没有Visual Studio。我很想知道为什么相同的代码在一台机器上而不是另一台机器上获得SQL语法错误的原因。
有人能告诉我如何进行的线索吗? 感谢。
答案 0 :(得分:3)
选项。按可能性排序......
什么是DB compat level? sp_helpdb
会告诉你。您需要年满90岁才能使用CTE
SELECT @@ VERSION在两个SQL Server上都有什么用?真的都是'2008?
如果您在CTE之前有额外的SQL命令,请尝试;WITH...
观察......为什么不使用参数而不是字符串连接?