Sql server 相容層級引發的血案

來源:互聯網
上載者:User

 

     

錯誤: 昨天給同事做一個Demo ,就是關於enhance T-Sql 中PIVOT 的用法 :select * from PrivtDemo pivot ( sum([mark]) for [course] in([語文],[數學],[英語])) as pvt 用法發生了如下的錯誤

              Msg 102, Level 15, State 1, Line 1
              Incorrect syntax near '('.

              當時也考慮是不是相容問題,但是當時我用的倆個判斷依據, 就開始考慮是不是我的文法使用有錯誤(成功執行過,讓我很鬱悶,有道是丟什麼不能丟人啊!)

 

1.       資料庫連結的是Sql Server 2005 的執行個體(BQCDEV01"DEV)

2.         我看見 pivot 能被開發環境識別為關鍵字

 

 原因分析:           但是一直找不到原因

 

                那究竟是什麼原因(google 了下)

                說是相容層級的問題

                然後我在出現錯誤的資料庫裡面執行了下 EXEC   sp_dbcmptlevel   CallCenterEIS,90    

  在執行就OK了

      然後為了確定是不是這個原因我又執行了下EXEC   sp_dbcmptlevel   CallCenterEIS,80   

     又開始出現開始出現的錯誤,這說明錯誤的原因已經確定就是相容性問題

     但是為什麼出現這個問題

       那就是我是用 Sql Server 2000 的指令碼產生的工具 產生的指令碼然後在sql server 2005 利用這個指令碼產生 2005 的資料庫CallCenterEIS,但是Sql Server 2000的指令碼裡面有一些只有在Sql Server 2000裡面經常使用的文法,導致 Sql Server 2005 把這個資料庫預設的相容層級設定為80

 

結論: 如果大家在Sql server 2005 的資料庫開發中使用 T-Sql增強新文法 的時候如果有時候出錯找不到原因的時候可以考慮是不是相容層級的問題

由 sql server 2000 升級到 sql server 2005 的資料庫在開發中如果使用了 sql server 2005 的新文法(xml 操作,排序函數等)會報出一些莫名的錯誤比如(System.Data.SqlClient.SqlException: 將截斷字串或位元據  Msg 102, Level 15, State 1, Line 1 Incorrect syntax near '('. ….)等錯誤,無法排查,其實這些錯誤都是相容性的問題

 

 

 PS:

 

sp_dbcmptlevel (Transact-SQL)

[本主題為預先發布的文檔內容,在未來的版本中可能會更改。包括預留位置形式的空白主題。]

將某些資料庫行為設定為與指定的 SQL Server 版本相容。

重要提示:

後續版本的 Microsoft SQL Server 將刪除該功能。請不要在新的開發工作中使用該功能,並儘快修改當前還在使用該功能的應用程式。而應使用 ALTER DATABASE。

Transact-SQL 文法約定

 文法

sp_dbcmptlevel [ [ @dbname = ] name ] 
    [ , [ @new_cmptlevel = ] version ]

 參數

[ @dbname = ] name

要為其更改相容層級的資料庫的名稱。資料庫名稱必須符合標識符的規則。name 的資料類型為 sysname,預設值為 NULL。

[ @new_cmptlevel = ] version

資料庫要與之相容的 SQL Server 的版本。version 的資料類型為 tinyint,預設值為 NULL。該值必須為下列值之一:

80 = SQL Server 2000

90 = SQL Server 2005

100 = SQL Server 2008

 傳回碼值

0(成功)或 1(失敗)

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.