SQL Server 2014 中對於 Database Engine 的重大變更

本主題描述 SQL Server 2014 Database Engine 和舊版SQL Server的重大變更。 這些變更可能會中斷以舊版 SQL Server 為基礎的應用程式、指令碼或功能。 當您升級時可能會遇到這些問題。 如需詳細資訊,請參閱< Use Upgrade Advisor to Prepare for Upgrades>。

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 參數目前記載成 ,是正確的長度上限。 但目前的實作會傳回 varbinary(50)。 應用程式應繼續保留 varbinary(8000),如此後續版本的 Cookie 傳回大小如有增加,應用程式才可繼續正常地運作。 如需詳細資訊,請參閱 sp_setapprole (Transact-SQL)
EXECUTE AS EXECUTE AS 的 Cookie OUTPUT 參數目前記載成 varbinary(8000),這是正確的長度上限。 但目前的實作會傳回 varbinary(100)。 應用程式應繼續保留 varbinary(8000),如此後續版本的 Cookie 傳回大小如有增加,應用程式才可繼續正常地運作。 如需詳細資訊,請參閱 EXECUTE AS (Transact-SQL)
sys.fn_get_audit_file 函數 已新增兩個額外的資料行 (user_defined_event_iduser_defined_information) ,以支援使用者定義的稽核事件。 沒有依照名稱選取資料行的應用程式可能會傳回超過預期數目的資料行。 請依照名稱選取資料行,或調整應用程式以接受這些額外的資料行。
WITHIN 保留關鍵字 WITHIN 現在是保留關鍵字。 名為 'within' 之物件或資料行的參考將會失敗。 請重新命名物件或資料行名稱,或者使用括號或引號來分隔名稱。 例如:SELECT * FROM [within]
或 類型之計算資料行的 CAST 和 CONVERT 作業 在舊版的 SQL Server中,和 datetime2 資料類型上 time CAST 和 CONVERT 作業的預設樣式為 121,但計算資料行運算式中使用任一類型除外。 若為計算資料行,預設樣式為 0。 當您建立計算資料行、將它們用於包含自動參數化的查詢或用於條件約束定義時,這種行為就會影響計算資料行。

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

將資料庫升級為相容性層級 110 不會變更已經儲存至磁碟的使用者資料。 您必須依適當情況手動更正這項資料。 例如,如果您使用了 SELECT INTO,根據包含上述計算資料行運算式的來源建立資料表,系統就會儲存資料 (使用樣式 0) 而非計算資料行定義本身。 您必須手動將這項資料更新為符合樣式 121。
ALTER TABLE ALTER TABLE 陳述式只允許兩部分 (schema.object) 資料表名稱。 使用下列格式指定資料表名稱現在會在編譯時期失敗,錯誤 117:

server.database.schema.table

.database.schema.table

..schema.table

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

仰賴此錯誤行為的應用程式將會失敗。
SERVERPROPERTY ('Edition') 已安裝 SQL Server 2012 實例的產品版本。 請利用這個屬性值來判斷已安裝的產品所支援的功能和限制 (如最大 CPU 數目)。

根據已安裝的企業版本,這可以傳回 「Enterprise Edition」或「Enterprise Edition:核心型授權」。 Enterprise 版本會根據單一實例的計算容量上限來區分SQL Server。 如需 SQL Server 2012 中計算容量限制的詳細資訊,請參閱SQL Server 版本的計算容量限制
CREATE LOGIN 密碼' HASHEDCREATE LOGIN WITH PASSWORD = ' 選項不能與 SQL Server 7 或更早版本所建立的雜湊搭配使用。
datetimeoffset 的 CAST 和 CONVERT 作業 從日期和時間類型轉換成 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
現在是:pages_in_use_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現在是:
foreign_committed_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現在是:
physical_memory_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.data_spaces

sys.partition_schemes

sys.filegroups

sys.partition_functions
新的資料行 is_system 已經加入至 sys.data_spaces 和 sys.partition_functions (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 為目標的自訂應用程式參考 SqlTypes 元件 11.0 版時,應用程式將會失敗,因為 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 和更新版本。

  • 標記應該包裝在 標記下。

支援 AWE

32 位元 Address Windowing Extensions (AWE) 支援已停用。 這可能會導致 32 位元作業系統的效能降低。 若為使用大量記憶體的安裝,請移轉至 64 位元作業系統。

XQuery 函數能夠感知 Surrogate

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

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

  • 以二進位值的形式提供常數字串值。 使用此方法時,您仍然可以傳遞無效或部分 Surrogate 字組。

  • 透過提供字元實體,提供常數字串值。 使用此方法時,您無法傳遞無效的 Surrogate 字組。 XQuery 函數需要高層級字元的單一字元實體。 如果您提供了 Surrogate 字組字元的字元實體,這些函數會引發錯誤。

  • 使用 sql:columnsql:variable匯入外部值。 使用這些方法時,您仍然可以導入無效或部分 Surrogate 字組。

受影響的 XQuery 函數和運算子

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

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

  • fn:substring

  • fn:contains。 不過,如果將部分 Surrogate 配對當做值傳遞, 則包含 可能會傳回非預期的結果,因為它可能會發現格式正確的 Surrogate 配對中包含的部分 Surrogate 配對。

  • fn:concat。 不過,如果將部分 Surrogate 配對當做值傳遞, concat 可能會產生不正確的 Surrogate 配對或部分 Surrogate 配對。

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

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

從一部 SQL Server 2012 伺服器呼叫到另一部系統程式時,透過 分散式查詢呼叫 OPENQUERY 將會失敗。 當 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

  • 比較運算子和 順序 by 子句

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

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

  • fn:string-length

  • fn:substring

SQL Server 2008/SQL Server 2008 R2 的最新變更

本節包含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 中成功,但在 2008 SQL Server失敗。 我們已針對每個狀況提供解決方案。

使用模擬的 CLR 使用者定義函數、使用者定義匯總或 UDT 方法具有類型 nvarchar(max) 為 、 varchar(max)varbinary(max)ntexttextimage 或大型 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 元素。 若需相關資訊,請參閱 。
執行程序表 XML 結構描述 新的 IndexKind 屬性會新增至 Showplan XML 架構中的 ObjectType 複雜類型。 針對 SQL Server 2005 架構嚴格驗證SQL Server計畫的應用程式將會失敗。

Transact-SQL

功能 描述
ALTER_AUTHORIZATION_DATABASE DDL 事件 在 SQL Server 2005 中,當 DDL 事件ALTER_AUTHORIZATION_DATABASE引發時,當 (DDL) 作業中的安全性實體類型為物件時,就會在此事件的EVENTDATA xml ObjectType元素中傳回值 'object'。 在 SQL Server 2008 中,會傳回實際的類型 (,例如'table'或 'function') 。
CONVERT 如果您將無效的樣式傳遞給 CONVERT 函數,當轉換類型為二進位對字元或字元對二進位時,系統就會傳回錯誤。 在舊版的 SQL Server中,不正確樣式會設定為二進位到字元和字元到二進位轉換的預設樣式。
GRANT/DENY/REVOKE 組件的 EXECUTE 您無法針對組件授與、拒絕或撤銷 EXECUTE 權限。 這個權限沒有任何作用,而且現在會導致錯誤。 請改為針對參考此組件方法的預存程序或函數授與、拒絕或撤銷 EXECUTE 權限。
GRANT/DENY/REVOKE 系統類型的權限 您無法針對系統類型授與、拒絕或撤銷權限。 在舊版SQL Server中,這些語句會成功,但沒有任何作用。 在 SQL Server 2008 中,會傳回錯誤。
GROUP BY 在 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 子句的目標資料表不可以有任何啟用的觸發程序。
precompute rank 伺服器層級選項 SQL Server 2008 不支援此選項。 請盡快修改目前仍使用這項功能的應用程式。
READPAST 資料表提示 您在快照集隔離的情況下指定 READPAST 提示。

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

GroupName 現在是:
RoleName

Group_name現在是:
Role_name

Group_id現在是:
Role_id

Users_in_group現在是:
Users_in_role
透明資料加密 透明資料加密 (TDE) 是在 I/O 層級執行:頁面結構在記憶體中處於未加密狀態,而且只有當頁面寫入磁碟時,才會進行加密。 資料庫檔案和記錄檔都會進行加密。 例如,藉由直接掃描資料或記錄檔,) 掃描資料或記錄檔,略過存取 (頁面SQL Server一般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。 移除開頭的冒號,或為名稱測試指定一個前置詞,例如,(n$/CTR02) 或 (n$/p1:CTR02)。

Connecting

功能 描述
使用 SSL 從SQL Server Native Client連線 使用 SQL Server Native Client 連線時,使用 「SERVER=shortname;FORCE ENCRYPTION=true「 具有憑證,其主體會指定完整功能變數名稱, (FQDN) 因為驗證寬鬆而在過去連線。 SQL Server 2008 R2 藉由強制施行憑證的 FQDN 主旨來增強安全性。 依賴寬鬆驗證的應用程式必須採取下列其中一項動作:

使用連接字串中的 FQDN。

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

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

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

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

-此選項不適用於使用資料庫鏡像的應用程式,因為提供者不會查閱所接收容錯移轉夥伴名稱的別名。
擁有針對簡短名稱發出的憑證。

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

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 中已被取代的 Database Engine 功能
SQL Server 2014 中對於 Database Engine 功能的行為變更
SQL Server 2014 中已停止的 Database Engine 功能
SQL Server Database Engine 回溯相容性
ALTER DATABASE 相容性層級 (Transact-SQL)
SQL Server 2014 中管理工具功能的突破性變更