2009-08-26 85 views
2

我在开发使用SQL Server 2005的开发环境,但SQL Server 2000在生产服务器上的应用程序的不幸的情况是。我有一个开发/测试服务器上工作正常,但在生产环境中落在了一个相当复杂的SELECT查询:多内连接SQL 2000中

SELECT tbl_questions.Question, tbl_questions.QuestionCode 
FROM tbl_questions INNER JOIN (
    SELECT sg.questioncode, sg.gradeB, sg.gradeA, t2.wt 
    FROM tbl_scoregrade AS sg INNER JOIN (
     SELECT t1.QuestionCode, AVG(1.0 * aw.Weight) AS wt 
     FROM tbl_AnswerWeight AS aw INNER JOIN (
      SELECT assa.QuestionCode, assa.Answer 
      FROM tbl_AllStaffSurveyAnswers AS assa INNER JOIN 
      tbl_AllStaffSurvey AS ass ON assa.Questionguid = ass.Questionguid 
      WHERE (ass.Trust = 'RD7') AND (ass.Specialty = '97')) 
     AS t1 ON aw.questioncode = t1.QuestionCode AND aw.Response = t1.Answer 
     GROUP BY t1.QuestionCode) 
    AS t2 ON sg.questioncode = t2.QuestionCode AND sg.gradeA > t2.wt) 
AS t3 ON tbl_questions.QuestionCode = t3.questioncode 

你能看见什么,应该使在不同版本的SQL服务器的运行差异,或事实上,任何情况下都可以简化查询?

+0

您可以发布您收到的错误消息吗? – 2009-08-26 10:15:16

+0

是否与运行SQL的版本相同? – Gavin 2009-08-26 10:18:47

回答

0

好吧,这是一个有点尴尬 - 事实证明(罗宾说的),有什么不对的SQL本身;该查询是在ASPX应用程序中运行的,并且事实证明web.config文件中的连接字符串是错误的。

但对于一些非常好的答案感谢 - 罗宾对改变兼容性水平的尖端和哈坎的指针指向三角形连接是肯定的事情,我会寻找到。

1

我不能立即看到任何SQL的错误。但是,如果您收到的错误会有所帮助。

是模式/表结构两台服务器上相同的?例如,你是在SQL 2005机器上使用NVARCHAR(MAX)还是在SQL 2000上使用NTEXT?这会阻止你的GROUP BY工作。

最后,你可以在SQL 2005年更改数据库的兼容性级别在Management Studio中,右键单击数据库,选择,性能。转到“选项”页面,然后选择“兼容级别”作为SQL Server 2000(80)。

2

这不是回答你的问题,而是要思考的一个重要的事情。你有一个相当复杂的查询,它会消耗大量的资源。 SQL Server 2000中的优化器由于其复杂性而无法创建优化的查询计划,并且可能会使用表扫描。不建议使用超过4连接SQL Server 2000中

我建议你试图分裂的发言,并使用临时表

另一个要考虑的是使用的“三角加盟”

ON sg.questioncode = t2.QuestionCode AND sg.gradeA > t2.wt 

这是一个有趣的文章关于Triangular joins

问候

哈坎温瑟