本主題描述 Database Engine 中的突破性變更。這些變更可能會中斷以舊版 SQL Server 為根據的應用程式、指令碼或功能。當您升級時可能會遇到這些問題。如需詳細資訊,請參閱<使 用 Upgrade Advisor 來準備升級>。
功能 | 描述 |
---|---|
新的定序 | SQL Server 2008 導入了與 Windows Server 2008 所提供之定序完全一致的新定序。這 80 個新定序具有改進的語言精確度,而且是由 *_100 版本參考所表示。如果您針對伺服器或資料庫選擇新的定序,請注意,具有舊版用戶端驅動程式的用戶端可能無法辨識此定序。無法辨識的定序可能會導致應用程式 傳回錯誤並失敗。請考慮下列解決方案:
如需詳細資訊,請參閱<設 定和變更定序>。 |
Common Language Runtime (CLR)
功能 | 描述 |
---|---|
CLR 組件 | 當資料庫升級為 SQL Server 2008 時,就會自動安裝支援新資料類型的 Microsoft.SqlServer.Types 組件。Upgrade Advisor 規則會偵測任何具有衝突名稱的使用者類型或組件。Upgrade Advisor 將建議您重新命名任何衝突的組件,以及重新命名任何衝突的類型,或在程式碼中使用兩部分名稱來參考預先存在的使用者類型。 如果資料庫升級偵測到具有衝突名稱的使用者組件,它將自動重新命名該組件並讓資料庫進入質疑模式。 如果具有衝突名稱的使用者類型在升級期間存在,將不會採取任何特殊步驟。在升級之後,舊的使用者類型和新的系統類型都會一 起存在。但是,該使用者類型只能透過兩部分名稱使用。 |
CLR 組件 | SQL Server 2008 會安裝 .NET Framework 3.5 SP1,以便更新全域組件快取 (GAC) 中的程式庫。如果您在 SQL Server 資料庫中註冊了不支援的程式庫,則升級至 SQL Server 2008 之後,SQL Server 應用程式可能會停止運作。這是因為服務或升級 GAC 中的程式庫並不會更新 SQL Server 內部的組件。如果某個組件同時存在 SQL Server 資料庫和 GAC 中,這個組件的兩個副本就必須完全相符。如果它們不相符,當 SQL Server CLR 整合使用該組件時,將會發生錯誤。如需詳細資訊,請參閱<支 援的 .NET Framework 程式庫>。 升級您的資料庫之後,請使用 ALTER ASSEMBLY 陳述式來服務或升級 SQL Server 資料庫內部的組件副本。如需詳細資訊,請參閱知 識庫文件 949080 (機器翻譯)。 若要偵測您是否正在應用程式中使用任何不支援的 .NET Framework 程式庫,請在資料庫中執行下列查詢。 SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%'; |
CLR 常式 | 在 CLR 使用者定義函數、使用者定義彙總或使用者定義型別 (UDT) 內部使用模擬可能會導致您的應用程式在升級至 SQL Server 2008 之後失敗並顯示錯誤 6522。 下列狀況在 SQL Server 2005 中會成功,但在 SQL Server 2008 中則會失敗。我們已針對每個狀況提供解決方案。
|
動態管理檢視
檢視 | 描述 |
---|---|
sys.dm_os_sys_info | 已移除 cpu_ticks_in_ms 和 sqlserver_start_time_cpu_ticks 資料行。 |
sys.dm_exec_query_resource_semaphores sys.dm_exec_query_memory_grants | resource_semaphore_id 資料行不是 SQL Server 2008 中的唯一識別碼。這項變更可能會影響疑難排解的查詢執行。如需詳細資訊,請參閱<sys.dm_exec_query_resource_semaphores (Transact-SQL)>。 |
執行程序表
功能 | 描述 |
---|---|
執行程序表 XML 結構描述 | 新的 SeekPredicateNew 元素已加入至執行程序表 XML 結構描述,而且封閉式 xsd 順序 (SqlPredicatesType) 已轉換成 |
執行程序表 XML 結構描述 | 新的 IndexKind 屬性已加入至執行程序表 XML 結構描述中的 ObjectType 複雜類型。針對 SQL Server 2005 結構描述嚴格驗證 SQL Server 計畫的應用程式將會失敗。 |
Transact-SQL
功能 | 描述 |
---|---|
ALTER_AUTHORIZATION_DATABASE DDL 事件 | 在 SQL Server 2005 中,當 DDL 事件 ALTER_AUTHORIZATION_DATABASE 引發時,如果資料定義語言 (Data Definition Language,DDL) 作業中安全性實體的實體類型是物件,值 'object' 就會傳入這個事件之 EVENTDATA xml 的 ObjectType 元素中。在 SQL Server 2008 中,則會傳回實際類型 (例如 'table' 或 'function')。 |
CONVERT | 如果您將無效的樣式傳遞給 CONVERT 函數,當轉換類型為二進位對字元或字元對二進位時,系統就會傳回錯誤。在舊版 SQL Server 中,無效的樣式會設定為二進位對字元或字元對二進位轉換的預設樣式。 |
GRANT/DENY/REVOKE 組件的 EXECUTE | 您無法針對組件授與、拒絕或撤銷 EXECUTE 權限。這個權限沒有任何作用,而且現在會導致錯誤。請改為針對參考此組件方法的預存程序或函數授與、拒絕或撤銷 EXECUTE 權限。 |
GRANT/DENY/REVOKE 系統類型的權限 | 您無法針對系統類型授與、拒絕或撤銷權限。在舊版 SQL Server 中,雖然這些陳述式會成功,但是沒有任何作用。在 SQL Server 2008 中,則會傳回錯誤。 |
OUTPUT 子句 | 若要避免不具決定性的行為,當檢視表或嵌入資料表值函式中的資料行是由下列其中一種方法所定義時,OUTPUT 子句便不得參考該資料行:
當 SQL Server 在 OUTPUT 子句中偵測到此類資料行時,會引發錯誤 4186。如需詳細資訊,請參閱<MSSQLSERVER_4186>。 |
OUTPUT INTO 子句 | OUTPUT INTO 子句的目標資料表不可以有任何啟用的觸發程序。 |
precompute rank 伺服器層級選項 | SQL Server 2008 不支援這個選項。請盡快修改目前仍使用這項功能的應用程式。 |
READPAST 資料表提示 | 當 READ_COMMITTED_SNAPSHOT 資料庫選項設為 ON,而且下列其中一個條件成立時,無法指定 READPAST 資料表提示:
若要在這些情況下指定 READPAST 提示,請移除 READCOMMITTED 資料表提示 (如果有的話),並在查詢包含 READCOMMITTEDLOCK 資料表提示。 |
sp_helpuser | 下列在 sp_helpuser 預存程序之結果集中傳回的資料行名稱已經變更。 先前的資料行名稱 新的資料行名稱 GroupName RoleName Group_name Role_name Group_id Role_id Users_in_group Users_in_role |
透明資料加密 | 透明資料加密 (TDE) 是在 I/O 層級執行:頁面結構在記憶體中處於未加密狀態,而且只有當頁面寫入磁碟時,才會進行加密。資料庫檔案和記錄檔都會進行加密。當資料庫使用 TDE 時,略過存取頁面之一般 SQL Server 機制 (例如,直接掃描資料或記錄檔) 的協力廠商應用程式將會失敗,因為資料已在檔案中加密。這類應用程式可以運用 Window Cryptographic API 來開發在 SQL Server 外部解密資料的解決方案。 |
XQuery
功能 | 描述 |
---|---|
日期時間支援 | 在 SQL Server 2005 中,xs:time、xs:date 和 xs:dateTime 資料類型沒有時區支援。時區資料會對應至 UTC 時區。SQL Server 2008 提供了符合標準的行為,因而產生下列變更:
修改應用程式和 XQuery 運算式來說明新的類型值。如需詳細資訊,請參閱<搭 配 time、date、datetime2 和 datetimeoffset 資料類型使用 XML>。 |
XQuery 和 Xpath 運算式 | 在 SQL Server 2005 中,允許使用 XQuery 或 XPath 運算式開頭為冒號 (':') 的步驟。例如,下列陳述式在冒號開頭的路徑運算式中,包含一個名稱測試 ( SELECT FileContext.query('for n$ in //CTR return 在 SQL Server 2008 中不允許此種用法,因為它不符合 XML 標準。傳回錯誤 9341。移除開頭的冒號,或為名稱測試指定一個前置詞,例如,(n$/CTR02) 或 (n$/p1:CTR02)。 |
連接
功能 | 說明 |
---|---|
使用 SSL 從 SQL Server Native Client 連接 | 當使用 SQL Server Native Client 連接時,使用 "SERVER=shortname; FORCE ENCRYPTION=true" 而且憑證的主旨可指定完整網域名稱 (FQDN) 的應用程式在過去因為寬鬆的驗證所以已經連接。SQL Server 2008 R2 藉由強制施行憑證的 FQDN 主旨來增強安全性。依賴寬鬆驗證的應用程式必須採取下列其中一項動作:
|