2009-08-26 40 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

問候

哈坎溫瑟