專案設定 (轉換) (SybaseToSQL)
[專案設定] 對話方塊的 [轉換] 頁面包含可自訂 SSMA 如何將 SAP Adaptive Server Enterprise (ASE) 語法轉換成 SQL Server 或 Azure SQL 語法的設定。
[轉換] 窗格可在 [專案設定] 和 [預設專案設定] 對話方塊中找到:
如果您想要指定所有 SSMA 專案的設定,請在 [工具] 功能表上選取 [預設專案設定],按一下左窗格底部的 [一般],然後按一下 [轉換]。
若要指定目前專案的設定,請在 [工具] 功能表上選取 [專案設定],按一下左窗格底部的 [一般],然後按一下 [轉換]。
其他區段
@@ERROR
SQL Server/Azure SQL 和 ASE 使用不同的錯誤碼。
使用此設定可指定在 ASE 程式碼中遇到 @@ERROR
參考時,SSMA 在 [輸出] 或 [錯誤清單] 窗格中所顯示的訊息 (警告或錯誤) 類型。
- 如果您選取 [轉換並以警告標記],SSMA 會轉換陳述式,並以警告註解進行標記。
- 如果您選取 [標記為錯誤],SSMA 將會略過轉換,並以錯誤註解標記陳述式。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 轉換和以警告標記 |
開放式 | 轉換和以警告標記 |
完整 | 以錯誤標記 |
LIKE 運算子的轉換
指定是否要轉換 LIKE
運算元以符合 SAP ASE 行為。 這是 ASE 修剪類似模式中的尾端空白。 因應措施是將右運算式轉換成具有最大精確度的固定長度資料類型。
- 選取 [簡單轉換] 以轉換運算式而不進行任何更正。
- 若要使用 ASE 行為,請選取 [轉換成固定長度]。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 簡單轉換 |
開放式 | 簡單轉換 |
完整 | 轉換成固定長度 |
將空字串 CONVERT 或 CAST 成數值型別
指定如何處理具有數值型別做為資料類型引數之 CONVERT
或 CAST
運算式內的空白字串。 下列選項適用於此設定:
- 選取 [簡單轉換] 以轉換運算式而不進行任何更正。
- 如果選取 [空字串作為零數值],則會以
CASE ltrim(rtrim({s})) WHEN "" THEN 0 else {s} END
運算式取代字串參數{s}
。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 簡單轉換 |
開放式 | 簡單轉換 |
完整 | 空字串作為零數值 |
NULL 串連
此設定會指定如何使用 NULL
轉換字串串連。 您可以為此特定設定進行下列選項的設定:
- 如果已選取 [使用 ISNULL 函數包裝] 選項,則串連中的每個非常數
string_expression
都會包裝成ISNULL(string_expression)
,且會以空字串取代NULL
。 - 保留目前的語法會維持原始語法。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 保留目前的語法 |
開放式 | 保留目前的語法 |
完整 | 使用 ISNULL 函數包裝 |
空字串的轉換
此設定會指定如何轉換空字串。 您可以為此特定設定進行下列選項的設定:
- 以空格取代所有字串運算式
- 以空格取代空字串常數
若要使用 SQL Server/Azure SQL 行為,請選取 [保留目前的語法]。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 保留目前的語法 |
開放式 | 保留目前的語法 |
完整 | 以空格取代所有字串運算式 |
CONVERT 和 CAST 二進位字串轉換
將二進位值轉換成數字可能會在不同的平台傳回不同的值。 例如,在 x86 處理器上,CONVERT(integer, 0x00000100)
會在 ASE 中傳回 65536
,但在 SQL Server 中傳回 256
。 ASE 也會根據位元組順序傳回不同的值。
使用此設定來控制 SSMA 轉換 CONVERT
以及 CAST
運算式的方式,其中包含二進位值:
- 選取 [簡單轉換] 以轉換運算式而沒有任何警告或更正。 如果您知道 ASE 伺服器具有不需要任何二進位值變更的位元組順序,請使用此設定。
- 選取 [轉換並更正],讓 SSMA 轉換並更正運算式以用於 SQL Server。 常值常數中的位元組順序將會反轉。 所有其他二進位值 (例如二進位變數和資料行) 都會以錯誤標記。 如果您知道 ASE 伺服器具有需要二進位值變更的位元組順序,請使用此值。
選取 [轉換並以警告標記],讓 SSMA 轉換並更正運算式,並以警告註解標記所有已轉換的運算式。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 轉換和以警告標記 |
開放式 | 簡單轉換 |
完整 | 轉換並更正 |
動態 SQL
使用此設定可指定在 ASE 程式碼中遇到動態 SQL 時,SSMA 在 [輸出] 或 [錯誤清單] 窗格中所顯示的訊息 (警告或錯誤) 類型。
- 如果您選取 [轉換並標記為警告],SSMA 會轉換動態 SQL,並以警告註解標記陳述式。
- 如果您選取 [以錯誤標記],SSMA 將會略過轉換,並以錯誤註解標記陳述式。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 轉換和以警告標記 |
開放式 | 轉換和以警告標記 |
完整 | 以錯誤標記 |
相等檢查轉換
在 SQL Server/Azure SQL 中,如果 ANSI_NULLS
設定為開啟,當任何相等比較包含 NULL
值時,SQL Server/Azure SQL 會傳回 UNKNOWN
。 如果 ANSI_NULLS
為關閉,當比較的資料行和運算式或兩個運算式都是 NULL
時,包含 NULL
值的相等比較會傳回 true。 根據預設,(ANSINULL OFF
) SAP ASE 相等比較的行為就像是具有 ANSI_NULLS OFF
的 SQL Server/Azure SQL 一樣。
- 如果您選取 [簡單轉換],SSMA 會將 ASE 程式碼轉換成 SQL Server/Azure SQL 語法,而不需額外檢查
NULL
值。 如果ANSI_NULLS
位於OFF
SQL Server/Azure SQL,或您想要依大小寫修訂相等比較,請使用此設定。 - 如果您選取 [考慮 NULL 值],SSMA 會使用
IS NULL
和IS NOT NULL
子句來新增NULL
值檢查。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 簡單轉換 |
開放式 | 簡單轉換 |
完整 | 考慮 NULL 值 |
格式字串
SQL Server/Azure SQL 不再支援 PRINT
和 RAISERROR
陳述式中的 format_string
引數。 format_string
引數允許將可取代的參數直接放在字串中,然後在執行階段取代參數。 相反地,SQL Server 需要使用字串常值或使用變數所建置的字串,來要求完整字串。 如需詳細資訊,請參閱 PRINT (Transact-SQL) 主題。
當 SSMA 遇到 format_string
引數時,可以使用變數來建置字串常值,或是建立新的變數,並使用該變數建置字串。
若要針對
PRINT
和RAISERROR
函數使用字串常值,請選取 [建立新字串]。在此模式中,如果 PRINT 或 RAISERROR 陳述式不使用預留位置和區域變數,陳述式就不會變更。 PRINT 字串常值中的雙百分比字元 (%%) 變更為單一百分比字元 %。
如下列範例所示,如果 PRINT 或 RAISERROR 陳述式使用預留位置和一或多個區域變數:
PRINT 'Total: %1!%%', @percent
SSMA 會將其轉換成下列語法:
PRINT 'Total: '+ CAST(@percent AS varchar(max)) + '%'
如在下列陳述式中,如果
format_string
是變數:PRINT @fmt, @arg1, @arg2
SSMA 無法執行簡單的字串轉換,而且必須建立新的變數:
DECLARE @print_format_1 varchar(max) SET @print_format_1 = REPLACE (@fmt, '%%', '%') SET @print_format_1 = REPLACE (@print_format_1, '%1!', CAST (@arg1 AS varchar(max))) SET @print_format_1 = REPLACE (@print_format_1, '%2!', CAST (@arg2 AS varchar(max))) PRINT @print_format_1
使用 [建立新的字串] 模式時,SSMA 會假設 SQL Server 選項
CONCAT_NULL_YIELDS_NULL
為OFF
。 因此,SSMA 不會檢查 Null 引數。若要讓 SSMA 為每個
PRINT
和RAISERROR
陳述式建置新的變數,然後將該變數用於字串值,請選取 [建立新的變數]。在此模式中,如果
PRINT
或RAISERROR
陳述式不使用預留位置和區域變數,SSMA 會以單一百分比字元取代所有雙百分比字元 (%%
),以符合 SQL Server/Azure SQL 語法。如下列範例所示,如果
PRINT
或RAISERROR
陳述式使用預留位置和一或多個區域變數:PRINT 'Total: %1!%%', @percent
SSMA 會將其轉換成下列語法:
DECLARE @print_format_1 varchar(max) SET @print_format_1 = 'Total: %1!%' SET @print_format_1 = REPLACE (@print_format_1, '%1!', ISNULL(CAST (@percent AS VARCHAR(max)), '')) PRINT @print_format_1
如在下列陳述式中,如果
format_string
是變數:PRINT @fmt, @arg1, @arg2
如下所示,SSMA 會建立新的變數,檢查每個引數中的 Null 值:
DECLARE @print_format_1 varchar(max) SET @print_format_1 = REPLACE (@fmt, '%%', '%') SET @print_format_1 = REPLACE (@print_format_1, '%1!', ISNULL(CAST (@arg1 AS varchar(max)),'')) SET @print_format_1 = REPLACE (@print_format_1, '%2!', ISNULL(CAST (@arg2 AS varchar(max)),'')) PRINT @print_format_1
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 建立新的字串 |
開放式 | 建立新的字串 |
完整 | 建立新變數 |
將明確值插入時間戳記資料行
SQL Server/Azure SQL 不支援將明確值插入時間戳記資料行。
- 若要從
INSERT
陳述式中排除時間戳記資料行,請選取 [排除資料行]。 - 若要在每次時間戳記資料行位於
INSERT
陳述式時列印錯誤訊息,請選取 [以錯誤標記]。 在此模式中,INSERT
陳述式不會轉換,而且會以錯誤註解標記。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 排除資料行 |
開放式 | 排除資料行 |
完整 | 以錯誤標記 |
儲存程序中定義的暫存物件
此設定會指定轉換期間,程序中顯示的暫存物件定義是否應該儲存在來源中繼資料中。
- 選取 [是] 以儲存至中繼資料。
- 如果不需要儲存物件,請選取 [否]。
Mode | 值 |
---|---|
預設 | Yes |
開放式 | Yes |
完整 | No |
Proxy 資料表轉換
指定 ASE Proxy 資料表是否轉換成 SQL Server/Azure SQL 資料表,或未轉換,且會以錯誤註解標記程式碼。
- 選取 [轉換] 將 Proxy 資料表轉換成一般資料表。
- 選取 [以錯誤標記],即可以錯誤註解標記 Proxy 資料表程式碼。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 以錯誤標記 |
開放式 | 以錯誤標記 |
完整 | 以錯誤標記 |
RAISERROR 基礎訊息編號
ASE 使用者訊息會儲存在每個資料庫中。 SQL Server 使用者訊息會集中儲存,您可透過 sys.messages
目錄檢視使用該訊息。 此外,ASE 使用者訊息從 20000
開始,但 SQL Server 錯誤訊息會從 50001
開始。
此設定會指定要新增至 ASE 使用者訊息編號的數字,以將其轉換成 SQL Server 使用者訊息。 如果 SQL Server 在 sys.messages
目錄檢視中有使用者訊息,您可能必須將此數字變更為較高的值。 因此,轉換的訊息編號不會與現有的訊息編號發生衝突。
請注意:
- 範圍
17000
-19999
中的 ASE 訊息來自sysmessages
系統資料表,而且不會轉換。 - 如果
RAISERROR
陳述式中參考的訊息編號是常數,SSMA 會將基礎訊息編號新增至常數,以判斷新的使用者訊息編號。 - 如果參考的訊息編號是變數或運算式,SSMA 將會建立中繼區域變數。
- 在 [開放式模式] 中,SSMA 會假設 SQL Server 選項
CONCAT_NULL_YIELDS_NULL
為OFF
,而且不會檢查NULL
引數。 - 在 [完整] 模式中,SSMA 會檢查
NULL
引數。 - 具有
arg-list
引數的RAISERROR
未經過轉換。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 30001 |
開放式 | 30001 |
完整 | 30001 |
系統物件
使用此設定可指定在 ASE 程式碼中遇到 ASE 系統物件的使用時,SSMA 在 [輸出] 或 [錯誤清單] 窗格中所顯示的訊息 (警告或錯誤) 類型。
- 如果您選取 [轉換並以警告標記],SSMA 會轉換系統物件的參考,並以警告註解標記陳述式。
- 如果您選取 [以錯誤標記],SSMA 不會轉換系統物件的參考,並以錯誤註解標記陳述式。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 轉換和以警告標記 |
開放式 | 轉換和以警告標記 |
完整 | 以錯誤標記 |
未解析的識別碼
使用此設定可指定在無法解析識別碼時,SSMA 在 [輸出] 或 [錯誤清單] 窗格中所顯示的訊息 (警告或錯誤) 類型。
- 如果您選取 [轉換並以警告標記],SSMA 會嘗試轉換未解析識別碼的參考,並以警告註解標記陳述式。
- 如果您選取 [以錯誤標記],SSMA 不會轉換未解析識別碼的參考,並以錯誤註解標記陳述式。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 轉換和以警告標記 |
開放式 | 轉換和以警告標記 |
完整 | 以錯誤標記 |
系統函數區段
CHARINDEX 函數
在 ASE 中,只有在所有輸入運算式都是 NULL
時,CHARINDEX
才會傳回 NULL
。 如果有任何輸入運算式為 NULL
,SQL Server/Azure SQL 會傳回 NULL
。
- 若要使用 ASE 行為,請選取 [取代函數]。 所有對
CHARINDEX
函數的呼叫都會取代為對CHARINDEX_VARCHAR
或CHARINDEX_NVARCHAR
使用者定義函數的呼叫,具體取決於模擬 SAP ASE 行為而傳遞的參數類型 (在使用者資料庫中根據結構描述名稱s2ss
所建立)。 - 若要使用 SQL Server/Azure SQL 行為,請選取 [保留目前的語法]。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 保留目前的語法 |
開放式 | 保留目前的語法 |
完整 | 取代函數 |
DATALENGTH 函數
當值是單一空間時,SQL Server/Azure SQL 和 ASE 與 DATALENGTH
函數所傳回的值不同。 在此案例中,SQL Server/Azure SQL 會傳回 0
,而 ASE 會傳回 1
。
- 若要使用 ASE 行為,請選取 [取代函數]。
DATALENGTH
函數的所有呼叫都會以CASE
運算式取代,以模擬 SAP ASE 行為。 - 若要使用預設 SQL Server/Azure SQL 行為,請選取 [保留目前的語法]。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 保留目前的語法 |
開放式 | 保留目前的語法 |
完整 | 取代函數 |
INDEX_COL 函數
ASE 支援 INDEX_COL
函數的選擇性 user_id
引數;不過,SQL Server/Azure SQL 不支援此引數。 如果您使用 user_id
引數,此函數無法轉換成 SQL Server/Azure SQL 語法。
- 若要使用 ASE 行為,請選取 [轉換函數]。 如果程式碼包含
user_id
引數,SSMA 會顯示錯誤。 - 若要在每次遇到
INDEX_COL
時顯示錯誤訊息,請選取 [以錯誤標記]。 SSMA 不會轉換函數的參考,並以錯誤註解標記陳述式。
Mode | 值 |
---|---|
預設 | 以錯誤標記 |
開放式 | 以錯誤標記 |
完整 | 以錯誤標記 |
INDEX_COLORDER 函數
SQL Server/Azure SQL 沒有 INDEX_COLORDER
系統函數。
- 若要使用 ASE 行為,請選取 [轉換函數]。 對
INDEX_COLORDER
函數的所有呼叫都會取代為對使用者定義函數的呼叫,其名稱與模擬 SAP ASE 行為 (在使用者資料庫中根據結構描述名稱s2ss
建立) 的名稱INDEX_COLORDER
相同。 - 若要在每次遇到
INDEX_COLORDER
時列印錯誤訊息,請選取 [以錯誤標記]。 SSMA 不會轉換函數的參考,並以錯誤註解標記陳述式。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 以錯誤標記 |
開放式 | 以錯誤標記 |
完整 | 以錯誤標記 |
LEFT 和 RIGHT 函數
ASE 中的 LEFT
和 RIGHT
函數對於負長度參數有不同的行為。
- 若要使用 ASE 行為,請選取 [取代函數]。 然後,長度參數會取代為會針對負值傳回
NULL
的CASE
運算式。 - 若要使用 SQL Server 行為,請選取 [保留目前的語法]。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 保留目前的語法 |
開放式 | 保留目前的語法 |
完整 | 取代函數 |
注意
如果長度參數是常值而非複雜運算式,則不論專案設定為何,長度值一律會取代為 NULL
。
NEXT_IDENTITY 函數
SQL Server/Azure SQL 沒有 NEXT_IDENTITY
系統函數。
- 若要使用 ASE 行為,請選取 [轉換函數]。 對
NEXT_IDENTITY
函數的所有呼叫都會取代為模擬 SAP ASE 行為的運算式(IDENT_CURRENT(parameter Value) + IDENT_INCR(parameter Value)
。 - 若要在每次遇到
NEXT_IDENTITY
時列印錯誤訊息,請選取 [以錯誤標記]。 SSMA 不會轉換函數的參考,並以錯誤註解標記陳述式。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 以錯誤標記 |
開放式 | 以錯誤標記 |
完整 | 以錯誤標記 |
預設/開放式/完整模式:以錯誤標記
PATINDEX 函數
指定是否要轉換 PATINDEX
函數以符合 SAP ASE 行為。 這是 ASE 修剪搜尋模式中的尾端空白。 因應措施是將值運算式轉換成具有最大精確度的固定長度資料類型,並將 rtrim
函數套用至搜尋模式。
- 若要使用 ASE 行為,請選取 [使用]。
- 若要使用預設 SQL Server/Azure SQL 行為,請選取 [不要使用]。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 請勿使用 |
開放式 | 請勿使用 |
完整 | 使用 |
REPLICATE 函數
REPLICATE
函數會將字串重複指定次數。 在 ASE 中,如果您指定將字串重複零次,則結果為 NULL
。 在 SQL Server/Azure SQL 中,結果是空字串。
- 若要使用 ASE 行為,請選取 [取代函數]。 所有對
REPLICATE
函數的呼叫都會取代為對REPLICATE_VARCHAR
或REPLICATE_NVARCHAR
使用者定義函數的呼叫,具體取決於模擬 SAP ASE 行為而傳遞的參數類型 (在使用者資料庫中根據結構描述名稱s2ss
所建立)。 - 若要使用預設 SQL Server/Azure SQL 行為,請選取 [取代函數]。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 取代函數 |
開放式 | 取代函數 |
完整 | 取代函數 |
TRIM (LTRIM, RTRIM) 函數
此設定會指定要以 SAP ASE 對等語法函數取代對 TRIM
、LTRIM
和 RTRIM
函數的呼叫,還是保留目前的語法。 在此特定設定中,有下列選項:
- 取代函數
- 保留目前的語法
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 取代函數 |
開放式 | 取代函數 |
完整 | 取代函數 |
SUBSTRING 函數
在 ASE 中,如果指定大於運算式中字元數目的起始值,或長度等於零,則 SUBSTRING(expression, start, length)
函數會傳回 NULL
。 在 SQL Server/Azure SQL 中,對等的運算式會傳回空字串。
- 若要使用 ASE 行為,請選取 [取代函數]。 所有對
SUBSTRING
函數的呼叫都會取代為對SUBSTRING_VARCHAR
或SUBSTRING_NVARCHAR
或SUBSTRING_VARBINARY
使用者定義函數的呼叫,具體取決於模擬 SAP ASE 行為而傳遞的參數類型 (在使用者資料庫中根據結構描述名稱s2ss
所建立)。 - 若要使用 SQL Server/Azure SQL 行為,請選取 [保留目前的語法]。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
Mode | 值 |
---|---|
預設 | 保留目前的語法 |
開放式 | 保留目前的語法 |
完整 | 取代函數 |
資料表區段
新增主索引鍵
如果 SAP ASE 資料表沒有主索引鍵或唯一索引,請在 SQL Server 或 Azure SQL 資料表中建立新的主索引鍵。
Mode | 值 |
---|---|
預設 | No |
開放式 | No |
完整 | Yes |
注意
連線到 Azure SQL 時,預設為 [是]。