共用方式為


SQL Server 2014 中 Database Engine 功能的重大變更

本主題描述 SQL Server 2014 Database Engine 和舊版 SQL Server 的重大變更。 這些變更可能會中斷以舊版 SQL Server 為基礎的應用程式、腳本或功能。 升級時可能會遇到這些問題。 如需詳細資訊,請參閱使用 升級建議程式 準備升級

SQL Server 2014 的重大變更

沒有新問題。

SQL Server 2012 的重大變更

Transact-SQL

特徵 / 功能 說明
從名為 NEXT 的數據行或數據表中選取 序列會使用 ANSI 標準 NEXT VALUE FOR 函式。 如果數據表或數據行名為 NEXT,且數據表或數據行別名為 VALUE,而且省略 ANSI 標準 AS,則結果語句可能會造成錯誤。 為了解決此問題,請加入 ANSI 標準中的「AS」關鍵詞。 例如, SELECT NEXT VALUE FROM Table 應該重寫為 SELECT NEXT AS VALUE FROM Table ,而且 SELECT Col1 FROM NEXT VALUE 應該重寫為 SELECT Col1 FROM NEXT AS VALUE
PIVOT 運算元 當資料庫相容性層級設定為 110 時,遞歸通用數據表運算式 (CTE) 查詢中不允許 PIVOT 運算符。 重寫查詢,或將相容性層級變更為100或更低。 在遞歸 CTE 查詢中使用 PIVOT 會在每個群組有多個數據列時產生不正確的結果。
sp_setapprole和sp_unsetapprole Cookie OUTPUTsp_setapprole 參數目前被記載為 varbinary(8000),這是正確的最大長度。 不過,目前的實作會返回 varbinary(50)。 如果 Cookie 傳回大小在未來版本中增加,應用程式應該會繼續保留 varbinary(8000) ,讓應用程式繼續正常運作。 如需詳細資訊,請參閱 sp_setapprole (Transact-SQL)
以指定身分執行 EXECUTE AS 的 Cookie OUTPUT 參數目前記載為 varbinary(8000) 正確的最大長度。 不過,目前的執行會回傳 varbinary(100)。 如果 Cookie 傳回大小在未來版本中增加,應用程式應該會繼續保留 varbinary(8000) ,讓應用程式繼續正常運作。 如需詳細資訊,請參閱 EXECUTE AS (Transact-SQL)
sys.fn_get_audit_file 函式 已新增兩個額外的數據行(user_defined_event_iduser_defined_information),以支援使用者定義的稽核事件。 未依名稱選取資料行的應用程式可能會傳回比預期更多的數據行。 依名稱選取數據行,或調整應用程式以接受這些額外的數據行。
WITHIN 為保留關鍵詞 WITHIN 現在是保留關鍵詞。 名為 『within』 的物件或數據行參考將會失敗。 重新命名物件或數據行名稱,或使用括弧或引號來分隔名稱。 例如: SELECT * FROM [within]
計算類型 timedatetime2 之數據行上的 CAST 和 CONVERT 作業 在舊版本的 SQL Server 中,對 timedatetime2 數據類型進行 CAST 和 CONVERT 作業的預設樣式為 121,但在計算欄位運算式中使用任一類型時則除外。 若為計算資料行,預設樣式為 0。 當您建立計算資料行、將它們用於包含自動參數化的查詢或用於條件約束定義時,這種行為就會影響計算資料行。

在相容性層級110下,timedatetime2 數據類型中,CAST 和 CONVERT 作業的預設樣式一律為 121。 如果您的查詢仰賴舊的行為,請使用低於 110 的相容性層級,或在受影響的查詢中明確指定 0 樣式。

將資料庫升級至相容性層級 110 並不會變更儲存至磁碟的用戶數據。 您必須依適當情況手動更正這項資料。 例如,如果您使用SELECT INTO 從包含上述計算數據行表達式的來源建立數據表,則會儲存數據(使用樣式 0),而不是計算數據行定義本身。 您必須手動將這項資料更新為符合樣式 121。
ALTER TABLE(修改資料表) ALTER TABLE 語句只允許兩部分 (schema.object) 數據表名稱。 使用下列格式指定資料表名稱現在會在編譯階段失敗,錯誤 117:

伺服器.資料庫.架構.表

.database.schema.table

..schema.table

在早期版本中,指定格式為 server.database.schema.table 時會傳回錯誤 4902。 指定格式 .database.schema.table 或 ..schema.table 成功。 若要解決此問題,請移除使用四段式前綴。
流覽元數據 使用 FOR BROWSE 或 SET NO_BROWSETABLE ON 查詢視圖時,現在會傳回視圖的元數據,而不是基礎物件的元數據。 此行為現在與其他瀏覽中繼資料的方法一致。
SOUNDEX 在資料庫相容性層級 110 下,SOUNDEX 函式會實作新的規則,這可能會導致函式所計算的值與先前相容性層級下計算的值不同。 升級至相容性層級 110 之後,您可能需要重建使用 SOUNDEX 函式的索引、堆積或 CHECK 條件約束。 如需詳細資訊,請參閱 SOUNDEX (Transact-SQL)
失敗 DML 語句的數據列計數訊息 在 SQL Server 2012 中,當 DML 語句失敗時,Database Engine 會一致地將具有 RowCount: 0 的 TDS DONE 令牌傳送給用戶端。 在舊版的 SQL Server 中,當失敗的 DML 語句包含在 TRY-CATCH 區塊中,而且由 Database Engine 自動參數,或 TRY-CATCH 區塊不在與失敗語句相同的層級時,就會傳送 -1 不正確的值給用戶端。 例如,如果 TRY-CATCH 區塊呼叫了預存程序,而程序中的 DML 語句失敗,則客戶端會錯誤地收到 -1 值。

依賴此不正確行為的應用程式將會失敗。
SERVERPROPERTY('Edition') 已安裝的 SQL Server 2012 的實例產品版本。 使用此屬性的值來判斷功能和限制,例如已安裝產品所支援的CPU數目上限。

根據已安裝的 Enterprise 版本,此可能返回 'Enterprise Edition' 或 'Enterprise Edition:以核心為基礎的授權'。 Enterprise 版本會根據單一 SQL Server 實例的計算容量上限來區分。 如需 SQL Server 2012 中計算容量限制的詳細資訊,請參閱 SQL Server 版本的計算容量限制
創建登入帳戶 密碼' HASHEDCREATE LOGIN WITH PASSWORD = '選項不能與 SQL Server 7 或更早版本所建立的哈希搭配使用。
的 CAST 和 CONVERT 作業 datetimeoffset 從日期和時間類型 datetimeoffset 轉換成 時,唯一支援的樣式是 0 或 1。 所有其他轉換樣式都會傳回錯誤 9809。 例如,下列程式代碼會傳回錯誤 9809。

SELECT CONVERT(date, CAST('7070-11-25 16:25:01.00986 -02:07' as datetimeoffset(5)), 107);

動態管理檢視

查看 說明
sys.dm_exec_requests 命令資料列會從 nvarchar(16) 變更為 nvarchar(32)
sys.dm_os_memory_cache_counters 下列欄位已重新命名:

「single_pages_kb」現在是:
pages_kb

multi_pages_kb
現在是:正在使用頁面(KB)
sys.dm_os_memory_cache_entries 欄位 pages_allocated_count 已重新命名為 pages_kb。
sys.dm_os_memory_clerks 欄 multi_pages_kb 已被移除。

數據行single_pages_kb數據行已重新命名為pages_kb。
sys.dm_os_memory_nodes 下列欄位已重新命名:

現在的 single_pages_kb 是:
pages_kb

multi_pages_kb現在是:
外部分配的KB
sys.dm_os_memory_objects 下列數據行已重新命名。

pages_allocated_count目前為:
pages_in_bytes

max_pages_allocated_count現在是:max_pages_in_bytes
sys.dm_os_sys_info 下列欄位已重新命名:

「physical_memory_in_bytes」現在是:
物理記憶體_kb

bpool_commit_target現在是:
committed_target_kb

bpool_visible現在是:
visible_target_kb

virtual_memory_in_bytes現在是:
virtual_memory_kb

bpool_commited現在是:
committed_kb
sys.dm_os_workers 已移除地區設定欄位。

目錄檢視

查看 說明
sys.資料空間

sys.partition_schemes

系統檔案群組

No change required, "sys.partition_functions" should remain as is for technical precision.
在 sys.data_spaces 和 sys.partition_functions 中新增了一個名為 is_system 的新欄位。 (sys.partition_schemes 和 sys.filegroups 繼承 sys.data_spaces 的數據行。

此數據行中的值 1 表示對象用於全文檢索索引片段。

在 sys.partition_functions、sys.partition_schemes 和 sys.filegroups 中,新的數據行不是最後一個數據行。 修改依賴從這些目錄檢視傳回之數據行順序的現有查詢。

SQL CLR 資料類型 (geometry、geography 和 hierarchyid)

元件 Microsoft.SqlServer.Types.dll,其中包含空間數據類型和hierarchyid類型,已從10.0版升級至11.0版。 當下列條件成立時,參考此元件的自定義應用程式可能會失敗。

  • 當您將自定義應用程式從安裝 SQL Server 2008 R2 的電腦移至僅安裝 SQL Server 2014 的電腦時,應用程式將會失敗,因為參考的 SqlTypes 元件版本 10.0 不存在。 您可能會看到此錯誤訊息: "Could not load file or assembly 'Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified."

  • 當您參考 SqlTypes 組件的 11.0 版,而同時安裝了 10.0 版時,您可能會看到此錯誤訊息:"System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry'."

  • 當您從以 .NET 3.5、4 或 4.5 為目標的自定義應用程式中參考版本 11.0 的 SqlTypes 組件時,應用程式將會失敗,因為 SqlClient 的設計是載入版本 10.0 的組件。 當應用程式呼叫下列其中一種方法時,就會發生此失敗:

    • GetValue 類別的 SqlDataReader 方法

    • GetValues 類別的 SqlDataReader 方法

    • 類別的 SqlDataReader 括弧索引運算符 []

    • ExecuteScalar 類別的 SqlCommand 方法

您可以使用下列其中一種方法來解決此問題:

  • 您可以呼叫 GetSqlBytes 方法,而不是上述 Get 方法來擷取 CLR SQL Server 系統類型,以在程式代碼中解決此問題,如下列範例所示:

    string query = "SELECT [SpatialColumn] FROM [SpatialTable]";  
          using (SqlConnection conn = new SqlConnection("..."))  
          {  
                SqlCommand cmd = new SqlCommand(query, conn);  
    
                conn.Open();  
                SqlDataReader reader = cmd.ExecuteReader();  
    
                while (reader.Read())  
                {  
                      // In version 11.0 only  
                      SqlGeometry g =   
    SqlGeometry.Deserialize(reader.GetSqlBytes(0));  
    
                      // In version 10.0 or 11.0  
                      SqlGeometry g2 = new SqlGeometry();  
                      g.Read(new BinaryReader(reader.GetSqlBytes(0).Stream));  
                }  
          }  
    
  • 您可以在應用程式群組態檔中使用元件重新導向來解決此問題,如下列範例所示:

    <runtime>  
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
        ...  
        <dependentAssembly>  
            <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />  
            <bindingRedirect oldVersion="10.0.0.0" newVersion="11.0.0.0" />  
        </dependentAssembly>  
        ...  
    </assemblyBinding>  
    <runtime>  
    
  • 您可以藉由指定 「Type System Version」 屬性的 「SQL Server 2012」 值,強制 SqlClient 載入元件 11.0 版,以在連接字元串中解決此問題。 此連接字串屬性僅適用於 .NET 4.5 和更新版本。

  • 標籤 assemblyBinding 應該包在標籤 runtime 底下。

AWE 的支援

32 位位址視窗延伸模組 (AWE) 支援已停止。 這可能會導致 32 位作系統的效能變慢。 對於使用大量記憶體的安裝,請移轉至 64 位作系統。

XQuery 函式 Surrogate-Aware

XQuery 函式和運算子的 W3C 建議要求它們將代表高範圍 Unicode 字元的代理字組在 UTF-16 編碼中視為單一字形。 不過,在 SQL Server 2012 之前的 SQL Server 版本中,字串函式無法將代理字組辨識為單一字元。 某些字串作業 -- 例如字串長度計算和子字串擷取 - 傳回不正確的結果。 SQL Server 2012 現在完全支援 UTF-16 和代理配對的正確處理。

SQL Server 中的 XML 資料類型只允許格式正確的代理字組。 不過,某些函式在某些情況下仍可傳回未定義或非預期的結果,因為可以將無效或部分代理字組傳遞至 XQuery 函式做為字串值。 在 SQL Server 中使用 XQuery 時,請考慮下列方法來產生字串值:

  • 提供常數值做為二進位值。 使用此方法時,仍可傳遞無效或部分代理字組。

  • 藉由提供字元實體來提供常數值。 使用此方法時,無法傳遞無效的 Surrogate 字組。 XQuery 函數需要代表高階字元的單一字元實體。 如果提供代理組字元的字元實體,這些函式將引發錯誤。

  • 使用 sql:columnsql:variable 匯入外部值。 使用這些方法時,仍可能會引入無效或部分代理字組。

受影響的 XQuery 函式和運算子

下列 XQuery 函式和運算符現在會在 SQL Server 2012 中正確處理 UTF-16 代理字組:

  • fn:string-length。 不過,如果傳遞無效或部分代理字組作為參數,則 字串長度 的行為是未定義的。

  • fn:substring

  • fn:contains。 不過,如果將部分代理字組當作值傳遞,則 contains 可能會返回非預期的結果,因為它可能會在格式正確的代理對中找到包含的部分代理字組。

  • fn:concat。 不過,如果將部分代理對作為值傳遞,concat可能會產生不正確的代理對或不完整的代理碼元。

  • 比較運算子和 order by 子句。 比較運算子包括 +、<、>、<=、>=、eqltgtlege

系統程序的分散式查詢呼叫

透過 OPENQUERY 的分散式查詢調用某些系統程序,當從一部 SQL Server 2012 伺服器呼叫到另一部時將會失敗。 當 Database Engine 無法探索程式的元數據時,就會發生這種情況。 例如: SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo')

隔離等級和sp_reset_connection

用戶端驅動程式會以下列方式處理連線的隔離等級:

  • 所有原生驅動程式(SNAC、MDAC、ODBC)都會在sp_reset_connection時設定隔離等級(根據應用程式設定)。

  • 針對 ADO.NET,當您從集區取得連線時,會隨機得到一個隔離等級,這取決於應用程式是否使用不同的隔離等級。 由於 ADO.NET 集區可以在內部和透明地回收連線,因此您無法預測集區中會有什麼。

  • 針對 JDBC 驅動程式,您會得到與 ADO.NET 相同的行為

    開啟連線之後,應用程式必須一律明確地設定隔離等級,以達到所需的效果。

    JDBC 連線可以集區化,因此應用程式可能會取得不確定的隔離等級,而不知道。

為了保留回溯相容性,這個新行為只適用於從 TDS 7.4 開始的最新用戶端。

回溯相容性

新行為取決於相容性層級

下列函式和運算符只會在相容性層級為 110 或更高版本時,示範上述的新行為:

  • fn:contains

  • fn:concat

  • 比較運算子和 子句排序

新行為取決於函式的預設命名空間 URI

下列函式只會在預設命名空間 URI 對應至最終建議中的命名空間時,才示範上述的新行為, http://www.w3.org/2005/xpath-functions也就是 。 當相容性層級為 110 或更高版本時,SQL Server 2012 預設會將預設函式命名空間系結至此命名空間。 不過,無論相容性層級為何,當使用此命名空間時,這些函式會示範新的行為。

  • fn:string-length

  • fn:substring

SQL Server 2008/SQL Server 2008R2 的重大變更

本節包含 SQL Server 2008 中導入的重大變更。 SQL Server 2008 R2 中未導入任何變更。

排序規則

特徵 / 功能 說明
新的排序 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 應用程式可能會在升級至 SQL Server 2008 之後停止運作。 這是因為 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 中失敗。 每個案例都會提供解決方案。

使用仿真的 CLR 使用者定義函數、使用者定義聚合或 UDT 方法具有類型為nvarchar(max), varchar(max), varbinary(max), ntext, text, image, 或大型 UDT 的參數,而且方法上沒有 DataAccessKind.Read 屬性。 若要解決此問題,請在方法上新增 DataAccessKind.Read 屬性、重新編譯元件,然後重新部署例程和元件。

CLR 數據表值函式,其具有執行仿真的 Init 方法。 若要解決此問題,請在方法上新增 DataAccessKind.Read 屬性、重新編譯元件,然後重新部署例程和元件。

CLR 表格值函式,其具有執行模擬身份的 FillRow 方法。 若要解決此問題,請從 FillRow 方法移除模擬身分。 請勿使用 FillRow 方法存取外部資源。 請改為從 Init 方法存取外部資源。

動態管理檢視

查看 說明
sys.dm_os_sys_info 已移除 cpu_ticks_in_ms 欄位和 sqlserver_start_time_cpu_ticks 欄位。
sys.dm_exec_query_resource_semaphoressys.dm_exec_query_memory_grants resource_semaphore_id數據行不是 SQL Server 2008 中的唯一標識碼。 這項變更可能會影響查詢執行的疑難解答。 如需詳細資訊,請參閱 sys.dm_exec_query_resource_semaphores (Transact-SQL)

錯誤和事件

特徵 / 功能 說明
登入錯誤 在 SQL Server 2005 中,當 SQL 登入用來連線到設定為只使用 Windows 驗證的伺服器時,會傳回錯誤 18452。 在 SQL Server 2008 中,會改為傳回錯誤 18456。

顯示計畫

特徵 / 功能 說明
Showplan XML 架構 新的 SeekPredicateNew 元素會新增至 Showplan XML 架構,而封入的 xsd 序列 (SqlPredicatesType) 會轉換成 <xsd:choice> 專案。 除了一或多個 SeekPredicate 元素,一或多個 SeekPredicateNew 元素現在可能會出現在 Showplan XML 中。 這兩個元素互斥。 SeekPredicate 會在 Showplan XML 架構中維護,以提供回溯兼容性;不過,在 SQL Server 2008 中建立的查詢計劃可能包含 SeekPredicateNew 元素。 如果 SeekPredicate 元素不存在,預期只從節點 ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates 擷取 SeekPredicate 子元素的應用程式可能會失敗。 重寫應用程式以預期此節點中的 SeekPredicateSeekPredicateNew 元素。 若需相關資訊,請參閱 。
Showplan XML 架構 新的 IndexKind 屬性會新增至 Showplan XML 架構中的 ObjectType 複雜類型。 嚴格驗證 SQL Server 計劃對照 SQL Server 2005 架構的應用程式將會失敗。

Transact-SQL

特徵 / 功能 說明
ALTER_AUTHORIZATION_DATABASE DDL 事件 在 SQL Server 2005 中,當 DDL 事件 ALTER_AUTHORIZATION_DATABASE 發生時,如果數據定義語言(DDL)作業中安全性實體的類型為物件,則此事件的 EVENTDATA XML 中的 ObjectType 元素會傳回值 'object'。 在 SQL Server 2008 中,會傳回實際類型(例如'table'或 'function')。
轉換 如果將無效的樣式傳遞至 CONVERT 函式,當轉換類型為二進位到字元或字元轉換成二進位時,就會傳回錯誤。 在舊版的 SQL Server 中,無效的樣式會設定為二進位到字元和字元到二進位轉換的默認樣式。
在組件上授予/拒絕/撤銷執行權限 EXECUTE 許可權無法授與、拒絕或撤銷給組件。 此許可權沒有任何影響,現在會造成錯誤。 針對引用元件方法的預存程序或函數,授予、拒絕或撤銷 EXECUTE 權限。
系統類型的 GRANT/DENY/REVOKE 許可權 許可權無法授與、拒絕或撤銷給系統類型。 在舊版的 SQL Server 中,這些語句會成功,但沒有作用。 在 SQL Server 2008 中,會傳回錯誤。
分組依據 GROUP BY 子句不能在用於群組依據清單的表達式中包含子查詢。 在舊版的 SQL Server 中,這是允許的。 在 SQL Server 2008 中,傳回錯誤 144。

例如,下列程式代碼會在 SQL Server 2005 中成功,並在 SQL Server 2008 中失敗。

DECLARE @Test TABLE(a int NOT NULL);
INSERT INTO @Test SELECT 1 union ALL SELECT 2;
SELECT COUNT(*)
FROM @Test
GROUP BY CASE WHEN a IN (SELECT t.a FROM @Test AS t)
THEN 1 ELSE 0
END;
OUTPUT 子句 為了防止不確定行為,當欄位是由下列方法之一定義時,OUTPUT 子句無法從檢視或內嵌表值函數中引用該欄位:

子查詢。

執行使用者或系統數據存取的使用者定義函式,或假設執行這類存取。

計算數據行,其定義中包含執行使用者或系統數據存取的使用者定義函數。



當 SQL Server 在 OUTPUT 子句中偵測到這類數據行時,就會引發錯誤 4186。 如需詳細資訊,請參閱 MSSQLSERVER_4186
OUTPUT INTO 子句 OUTPUT INTO 子句的目標數據表不能有任何啟用的觸發程式。
預先計算排名伺服器層級選項 SQL Server 2008 不支援此選項。 儘快修改目前使用這項功能的應用程式。
READPAST 數據表提示 在快照隔離的狀態下,您無法指定 READPAST 提示。

當 READ_COMMITED_SNAPSHOT 或 ALLOW_SNAPSHOT_ISOLATION 資料庫選項設定為 ON 時,會忽略 READPAST 提示。 不過,如果您結合 READPAST 提示與 READCOMMITTEDLOCK,READPAST 行為會與封鎖 READCOMMITTED 提示相同。
sp_helpuser sp_helpuser預存程式結果集中傳回的下列資料行名稱已變更:

群組名稱現在是:
職位名稱

Group_name 現在是:
Role_name

Group_id現在是:
Role_id

群組中的使用者現在為:
角色中的使用者
透明數據加密 透明數據加密 (TDE) 會在 I/O 層級執行:頁面結構在記憶體中未加密,而且只有在頁面寫入磁碟時才會加密。 資料庫檔案和記錄檔都會加密。 如果第三方應用程式略過一般 SQL Server 機制來存取頁面(例如,直接掃描數據或記錄檔),當資料庫使用 TDE 時將會失敗,因為檔案中的數據已加密。 這類應用程式可以利用 Windows 密碼編譯 API 來開發解決方案,以解密 SQL Server 外部的數據。

XQuery

特徵 / 功能 說明
日期與時間功能支援 在 SQL Server 2005 中,數據類型 xs:timexs:datexs:dateTime 沒有時區支援。 時區數據會對應至UTC時區。 SQL Server 2008 提供標準一致性行為,導致下列變更:

沒有時區的值會經過驗證。

提供的時區或時區的缺失將被保留。

內部記憶體表示法已修改。

預存值的解析度會增加。

不允許年份為負值。



注意:修改應用程式和 XQuery 運算式以考慮新的類型值。
XQuery 和 Xpath 運算式 在 SQL Server 2005 中,允許以冒號 (':') 開頭的 XQuery 或 XPath 表達式中的步驟。 例如,下列語句包含名稱測試,其中的路徑表達式以冒號開頭(CTR02))。

SELECT FileContext.query('for n$ in //CTR return <C>{data )(n$/:CTR02)} </C>) AS Files FROM dbo.MyTable;

在 SQL Server 2008 中,不允許使用此用法,因為它不符合 XML 標準。 傳回錯誤 9341。 拿掉前置冒號或為名稱 test 指定前綴,例如,(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 主體來增強安全性。 依賴寬鬆驗證的應用程式必須採取下列其中一個動作:

使用連接字串中的 FQDN。

-如果連接字串的 SERVER 關鍵詞設定在應用程式外部,則此選項不需要重新編譯應用程式。

-此選項不適用於已硬式編碼其連接字串的應用程式。

-此選項不適用於使用資料庫鏡像的應用程式,因為鏡像伺服器會以簡單名稱回復。
新增 shortname 的別名,以對應至 FQDN。

-此選項甚至適用於已硬式編碼其連接字串的應用程式。

-此選項不適用於使用資料庫鏡像的應用程式,因為提供者不會查閱所接收故障轉移夥伴名稱的別名。
為shortname頒發證書。

-此選項適用於所有應用程式。

SQL Server 2005 的重大變更

我們會在一組封網頁中累積並保留非常舊版 Microsoft SQL Server 的文件。 搜尋引擎不會處理封存網頁,例如 Bing.com 和 Google.com。 但您可以在我們的 Docs 舊版/ 位址看到這些封存:

這些檔案至少包含以下舊版本的文件:

  • SQL Server 2014
  • SQL Server 2012
  • SQL Server 2008 R2
  • SQL Server 2008
  • SQL Server 2005

SQL Server 2014 檔 已封存,且不再由搜尋引擎處理。 這些 2014 年的文章現在已標記為 NOINDEX 和 NOFOLLOW。

最新版的 SQL Server 以及其他最新版本, 記載於此處

另請參閱

SQL Server 2014 中已被取代的 資料庫引擎 功能
SQL Server 2014 中 Database Engine 功能的行為變更
SQL Server 2014 中已停止的資料庫引擎功能
SQL Server Database Engine 向後相容性
ALTER DATABASE 相容性等級 (Transact-SQL)
SQL Server 2014 中管理工具功能的重大變更