什麼是排序規則?
排序規則指定了表示每個字符的位模式。它還指定了用於排序和比較字符的規則。排序規則具有下面的特征:
◆語言
◆區分大小寫
◆區分重音
◆區分假名
要了解服務器當前使用的排序規則,可以在 SQL 查詢分析器中運行 sp_helpsort 系統過程。
SQL Server 7.0 不支持使用多個排序規則的數據庫。因此,在 SQL Server 7.0 中創建的所有數據庫均使用默認的排序規則。SQL Server 2000 支持多個排序規則。SQL Server 2000 數據庫可使用除默認排序規則以外的其他排序規則。此外,SQL Server 2000 還支持使用排序規則(除數據庫創建的排序規則外)的列。
在 DTS 中使用“使用排序規則”選項的條件
SQL Server 2000 可包含多個數據庫或列,它們可以使用除默認排序規則以外的排序規則。因此,在數據轉換服務 (DTS) 中引入了名為“使用排序規則”的新選項。“使用排序規則”選項的行為由要執行的轉換的類型決定。如果要在 SQL Server 2000 的兩個實例之間傳輸數據且啟用了“使用排序規則”選項,則數據將從源代碼頁轉換到目標代碼頁。如果沒有啟用“使用排序規則”選項且 SQL Server 2000 的兩個實例中的代碼頁相同,則會直接傳輸數據。如果代碼頁不同,則數據將從源代碼頁轉換到目標代碼頁。但是,在傳輸數據時,轉換可能會出現錯誤。
注意:如果排序規則用於數據本身並且列使用的是 COLLATE 子句,則排序規則很重要。“使用排序規則”選項確定當數據從一個排序規則傳輸到另一個排序規則時是否轉換代碼頁。“使用排序規則”選項不會影響是否設置了列定義的 COLLATE 屬性。因此,如果源表包含使用 COLLATE 子句創建的帶有特定排序規則的列,則此排序規則將在傳輸數據時得以保留,而不管是否在數據轉換服務向導中啟用了“使用排序規則”選項。
不改變數據庫排序規則的轉換方法
下列方法不改變數據庫的排序規則:
◆備份和還原:在某服務器上還原數據庫時,如果該服務器使用的排序規則與用於備份的服務器使用的排序規則不同,則不會將還原後的數據庫轉換為使用新的排序規則。數據庫排序規則仍保持原樣。
◆分離和重新附加:如果分離使用某一排序規則創建的數據庫,並且將該數據庫重新附加到使用其他排序規則的另一服務器,則該數據庫的排序規則不會改變。數據庫的排序規則仍保持原樣。
◆復制數據庫向導:復制數據庫向導實質上使分離和重新附加的過程自動化了。數據庫的排序規則仍保持原樣。
注意:復制數據庫向導僅在 SQL Server 2000 中可用。
在 SQL Server 7.0 中轉換數據庫的排序規則
要在運行 SQL Server 7.0 的兩台計算機之間更改數據庫的排序規則,必須在目標服務器上創建用戶數據庫和所有對象,然後使用 DTS 或 bcp 實用工具傳輸數據。
要將數據庫從運行 SQL Server 7.0 的計算機傳輸到運行 SQL Server 7.0 且具有另一排序規則的計算機,請按照下列步驟操作:
1.備份源數據庫。
2.使用 SQL Server 企業管理器為源數據庫中的所有對象創建腳本。
3.要從數據庫的所有表中導出數據,請使用 DTS 或 bcp 實用工具。
4.使用 SQL Server 企業管理器或 CREATE DATABASE 語句在目標服務器上創建新的數據庫。
注意:當使用 CREATE DATABASE 語句時,數據庫將使用與運行 SQL Server 7.0 的計算機相同的排序規則。
5.使用 SQL 查詢分析器來運行在步驟 2 中創建的腳本,以便在目標數據庫中重新創建所有對象。
注意:此表和列將使用與運行 SQL Server 7.0 的計算機相同的排序規則。
6.使用 DTS 或 bcp 實用工具將數據導入到目標表中。
將 SQL Server 7.0 中數據庫的排序規則轉換為 SQL Server 2000 中的排序規則
要在 SQL Server 7.0 和 SQL Server 2000 之間更改數據庫的排序規則,必須在傳輸數據之前,在目標服務器上使用適當的排序規則創建數據庫、列或同時創建數據庫和列。但是,在將數據從 SQL Server 7.0 傳輸到 SQL Server 2000 時,可以使用 DTS 刪除並重新創建對象。因此,在執行此操作時,必須在 DTS 中啟用“使用排序規則”選項。
注意:請不要使用 SQL Server 7.0 中的 DTS 實用工具與運行 SQL Server 2000 的計算機相互傳輸所有對象。如果必須在 SQL Server 7.0 和 SQL Server 2000 之間傳輸數據,則必須使用 SQL Server 2000 中的 DTS 實用工具。
要將 SQL Server 7.0 中數據庫的排序規則轉換為 SQL Server 2000 中的排序規則,請按照下列步驟操作:
1.備份源數據庫。
2.使用 SQL Server 企業管理器為源數據庫中的所有對象創建腳本。
3.如果列必須使用其他排序規則,而不使用目標數據庫上的默認排序規則,請對腳本中相應列的排序規則進行必要的更改。
4.使用適當的排序規則在目標服務器上創建新的數據庫。
5.使用 SQL 查詢分析器在目標服務器上運行在步驟 2 中創建的腳本,以便在數據庫中重新創建所有對象。
注意:新表和列使用與數據庫相同的排序規則,除非您為這些列指定了其他排序規則。
6.使用 DTS 或 bcp 實用工具傳輸數據。
注意:如果使用 DTS,請驗證下列信息:
◆確保在將數據從 SQL Server 7.0 傳輸到 SQL Server 2000 時啟用了“使用排序規則”選項。
◆因為已在目標服務器上使用適當的排序規則創建了對象,所以要禁用“首先創建目標對象”選項。
在 SQL Server 2000 中轉換數據庫的排序規則
要在 SQL Server 2000 中轉換數據庫的排序規則,請按照下列步驟操作:
1.備份源數據庫。
2.注意所有列是否使用 COLLATE 子句。
3.使用適當的排序規則在目標服務器上創建新的數據庫。
4.如果沒有列使用 COLLATE 子句,請使用 DTS 將數據傳輸到目標服務器。為此,請啟用“使用排序規則”選項以進行代碼頁轉換,並將數據轉換為目標數據庫上的新排序規則。如果所有列均使用 COLLATE 子句,請按照下列步驟操作:
a.為所有對象(不包括索引、觸發器、主鍵、外鍵、默認設置和約束)生成腳本。此外,確保啟用了“僅為與 7.0 版兼容的功能編寫腳本”選項,以便從腳本刪除 COLLATE 子句。
注意:使用“僅為與 7.0 版兼容的功能編寫腳本”選項時,可以更改排序規則。但是,生成腳本時將不考慮任何新的 SQL Server 2000 選項(包括用戶定義的函數、擴展屬性、INSTEAD OF 觸發器和視圖上的索引)。
b.在目標數據庫上運行步驟 a 中創建的腳本,以便使用目標數據庫的排序規則創建對象。
c.使用 DTS 僅傳輸源數據庫中的數據。
d.成功傳輸數據後,將會為源數據庫中的所有約束、外鍵、主鍵和索引生成腳本。
e.在目標數據庫上運行步驟 d 中創建的腳本。
更改 master 數據庫的排序規則
如果要更改 master 數據庫的排序規則,則必須重建 master 數據庫。在重建 master 數據庫時,實質上是創建了新的 master 數據庫。因此,重建 master 數據庫之前,應考慮下列事項:
◆確保創建了當前 master 數據庫的有效備份。在重建 master 數據庫時,還會重建 msdb 數據庫和 model 數據庫。因此,在重建 master 數據庫之前必須備份 msdb 數據庫和 model 數據庫。msdb 數據庫是用於存儲 SQL Server 作業、警報、運算符和 DTS 包的系統數據庫。model 數據庫是創建新數據庫時所使用的模板數據庫。
◆因為重建 master 數據庫會創建一個新的 master 數據庫,所以必須在重建 master 數據庫之後重新輸入現有登錄信息。因此,還必須在重建 master 數據庫之前導出登錄信息,然後在重建 master 數據庫後,導入登錄信息。
◆因為在重建 master 數據庫時會重建 msdb 數據庫,所以在重建 master 數據庫之前,必須為所有作業、警報和運算符生成腳本。此外,還必須確保移動了所有 DTS 包。
◆因為在重建 master 數據庫時會重建 model 數據庫,所以在重建 master 數據庫之前,必須記下或導出以前對 model 數據庫所做的全部更改或為其生成腳本。重建 model 數據庫之後,請重新應用已記錄的全部更改。
在 SQL Server 2000 中更改 master 數據庫的排序規則
更改 master 數據庫的排序規則之前,請按照下列步驟操作:
1.重建 master 數據庫之後,不會自動恢復在重建此數據庫之前創建的所有數據庫。因此,所有數據庫必須從備份進行還原,或者如果文件仍在磁盤上,則可以使用 sp_attach_db 系統存儲過程重新附加數據庫。請確保在重建 master 數據庫之前將所有必要的信息重新附加到現有數據庫。
2.在重建 master 數據庫時,僅更改 master 數據庫、model 數據庫和 msdb 數據庫的排序規則。不會更改用戶數據庫的排序規則。要更改現有用戶數據庫的排序規則或者使用適當的排序規則創建新的數據庫,請使用 ALTER DATABASE 命令,然後使用 DTS 或 bcp 實用工具將數據傳輸到新的數據庫。
注意:如果在 SQL Server 2000 中使用 ALTER DATABASE 命令來更改數據庫的排序規則,則表中列的排序規則將不會自動更改。要更改列的排序規則,請使用 ALTER TABLE 命令和 ALTER COLUMN 命令。如果使用 DTS,則可以在傳輸數據或使用“使用排序規則”選項之前,使用適當的排序規則創建表