項目設定(轉換) (SybaseToSQL)
[專案 設定] 對話框的 [轉換] 頁面包含可自定義 SSMA 如何將 SAP Adaptive Server Enterprise (ASE) 語法轉換為 SQL Server 或 Azure SQL 語法的設定。
[轉換] 窗格可在 [項目設定] 和 [預設項目設定] 對話框中取得:
如果您要指定所有 SSMA 項目的設定,請在 [工具] 選單上,選取 [預設項目設定],單擊左窗格底部的 [一般],然後按兩下 [轉換]。
若要指定目前項目的設定,請在 [工具] 功能表上,選取 [項目設定],單擊左窗格底部的 [一般],然後單擊 [轉換]。
其他區段
@@ERROR
SQL Server/Azure SQL 和 ASE 使用不同的錯誤碼。
使用此設置來指定 SSMA 在 ASE 程式碼中遇到 @@ERROR
參考時,在 [輸出] 或 [錯誤清單] 窗格中顯示的訊息類型(警告或錯誤)。
- 如果您選取 轉換並標示為警告,SSMA 會轉換語句,並以警告標記批註它們。
- 如果您選擇 並出現錯誤,SSMA 將會跳過轉換,並以錯誤註解標記這些語句。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 轉換並標記警告 |
樂觀的 | 轉換並標記為警告 |
滿 | 標記並出現錯誤 |
LIKE 運算子的轉換
指定是否轉換 LIKE
作数以符合 SAP ASE 行為。 重點是 ASE 會刪除類似模式中的尾端空白。 因應措施是將右表達式轉換成具有最大精確度的固定長度數據類型。
- 選取 [簡單轉換 來轉換表達式,而不需要任何更正。
- 若要使用 ASE 行為,請選取 [轉換為固定長度]。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 簡單轉換 |
樂觀的 | 簡單轉換 |
滿 | 轉換成固定長度 |
將空字串透過 CONVERT 或 CAST 轉換為數字類型
指定如何處理 CONVERT
或 CAST
表示式中的空白或空白字串,其數值類型為數據類型自變數。 下列選項適用於此設定:
- 選取 [簡單轉換 來轉換表達式,而不需要任何更正。
- 如果選取 空字串做為零數值,則會將字串參數
{s}
取代為CASE ltrim(rtrim({s})) WHEN "" THEN 0 else {s} END
表達式。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 簡單轉換 |
樂觀的 | 簡單轉換 |
滿 | 空字串為零數值 |
NULL 串連
此設定會指定如何使用 NULL
轉換字串串連。 您可以為此特定設定設定設定下列選項:
- 勾選取 [使用 ISNULL 函式包裝 ] 選項,則串連中的每個非常數
string_expression
都會包裝ISNULL(string_expression)
,NULL
會以空字串取代 。 - 保留目前的語法 會維護原始語法。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 保留目前的語法 |
樂觀的 | 保留目前的語法 |
滿 | 用ISNULL函式包覆 |
轉換空字串
此設定會指定如何轉換空字串。 您可以為此特定設定設定設定下列選項:
- 以空格取代所有字串表達式
- 以空格取代空字串常數
若要使用 SQL Server/Azure SQL 行為,請選擇 [保留目前的語法。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 保留目前的語法 |
樂觀的 | 保留目前的語法 |
滿 | 以空格取代所有字串表達式 |
CONVERT 和 CAST 二進位字串轉換
將二進位值轉換成數位可以在不同的平台上傳回不同的值。 例如,在 x86 處理器上,CONVERT(integer, 0x00000100)
在 ASE 中傳回 65536
,但在 SQL Server 中 256
。 ASE 也會根據位元組順序傳回不同的值。
使用此設定來控制 SSMA 如何轉換包含二進位值的 CONVERT
和 CAST
表示式:
- 選取 [簡單轉換 來轉換表達式,而不需要任何警告或更正。 如果您知道 ASE 伺服器具有不需要任何二進位值變更的位元組順序,請使用此設定。
- 選取 [[轉換] 並更正 [],讓 SSMA 轉換並更正表示式以用於 SQL Server。 常值常數中的位元組順序將會反轉。 所有其他二進位值(例如二進位變數和數據行)都會標示為錯誤。 如果您知道 ASE 伺服器具有需要變更二進位值的位元組順序,請使用此值。
選取 [[轉換] 並標示警告,讓 SSMA 轉換並更正表示式,並以警告批註標記所有已轉換的表達式。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 轉換並標記為警告 |
樂觀的 | 簡單轉換 |
滿 | 轉換並更正 |
動態 SQL
使用此設定可指定 SSMA 在 ASE 程式代碼中遇到動態 SQL 時,輸出 或 錯誤清單 窗格中所顯示的訊息類型(警告或錯誤)。
- 如果您選取 [[轉換] 並標示警告,SSMA 將會轉換動態 SQL,並以警告批註標記語句。
- 如果您選取 並且出現錯誤,SSMA 將略過轉換,並將語句標記為錯誤批註。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 轉換並標記為警告 |
樂觀的 | 轉換並標示警告 |
滿 | 標記並出現錯誤 |
相等性檢查變換
在 SQL Server/Azure SQL 中,如果 ANSI_NULLS
設定為開啟,當任何相等比較包含 NULL
值時,SQL Server/Azure SQL 會傳回 UNKNOWN
。 如果 ANSI_NULLS
關閉,當比較的欄位和表達式或兩個表達式都為 NULL
,且包含 NULL
值時,相等比較會返回 true。 根據預設,ANSINULL OFF
SAP ASE 相等比較的行為就像 SQL Server/Azure SQL 搭配 ANSI_NULLS OFF
。
- 如果您選取 [簡單轉換,SSMA 會將 ASE 程式代碼轉換成 SQL Server/Azure SQL 語法,而不會檢查
NULL
值。 如果ANSI_NULLS
是OFF
,或您想要根據情況修訂相等比較,請在 SQL Server/Azure SQL 中使用此設定。 - 如果您選取 [考慮 NULL 值],SSMA 會使用
IS NULL
和IS NOT NULL
子句來檢查NULL
值。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 簡單轉換 |
樂觀的 | 簡單轉換 |
滿 | 請考慮 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 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 建立新字串 |
樂觀的 | 建立新字串 |
滿 | 建立新的變數 |
將明確值插入時間戳數據行
SQL Server/Azure SQL 不支援將明確值插入時間戳數據行。
- 若要從
INSERT
語句中排除時間戳欄,請選擇 排除欄。 - 若要在每次時間戳資料列位於
INSERT
語句中時列印錯誤訊息,請選擇 [標記為錯誤]。 在此模式中,INSERT
語句將不會轉換,而且會以錯誤批註標示。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 排除欄位 |
樂觀的 | 排除欄位 |
完整 | 標示錯誤 |
儲存程式中定義的暫存物件
此設定會指定轉換期間,程式中顯示的暫存物件定義是否應該儲存在來源元數據中。
- 選取 [[是] 以儲存至元數據。
- 如果不需要儲存物件,請選取 [無]。
模式 | 價值 |
---|---|
預設 | 是的 |
樂觀的 | 是的 |
滿 | 不 |
代理資料表轉換
指定 ASE Proxy 資料表是否應轉換為 SQL Server/Azure SQL 資料表,或者如果未轉換,程式碼則會用錯誤註釋標記。
- 選取 [轉換],將代理資料表轉換成一般資料表。
- 選取 用錯誤標記,以簡單地標記具有錯誤註釋的代理表代碼。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 標記並出現錯誤 |
樂觀的 | 錯誤標記 |
滿 | 標記並出現錯誤 |
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 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 30001 |
樂觀的 | 30001 |
滿 | 30001 |
系統物件
使用此設定可指定 SSMA 在遇到 ASE 系統物件時,於 輸出 或 錯誤清單 窗格中顯示的訊息類型(警告或錯誤)。
- 如果您選取 轉換 並標示警告,SSMA 會將對系統物件的參考轉換,並將語句標示為警告註解。
- 如果您選取 [標記並出現錯誤,SSMA 將不會將參考轉換成系統物件,而且會以錯誤批註標記語句。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 進行轉換並標記為警告 |
樂觀的 | 轉換並標記警告 |
滿 | 標記錯誤 |
未解析的標識碼
使用此設定來指定在 SSMA 無法解析標識符時於 輸出 或 錯誤清單 窗格中顯示的訊息類型(警告或錯誤)。
- 如果您選取 [[轉換] 並標示為警告,SSMA 會嘗試將參考轉換成未解析的標識符,並將語句標示為警告批註。
- 如果您選取 [標記並出現錯誤,SSMA 將不會將參考轉換成未解析的標識碼,而且會以錯誤批註標記語句。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 轉換並標記為警告 |
樂觀的 | 轉換並以警告標記 |
滿 | 標記錯誤 |
系統功能區段
CHARINDEX 函式
在 ASE 中,只有在所有輸入表達式都 NULL
時,CHARINDEX
才會傳回 NULL
。 如果有任何輸入表達式 NULL
,SQL Server/Azure SQL 會傳回 NULL
。
- 若要使用 ASE 行為,請選取 Replace 函式。 所有對
CHARINDEX
函式的呼叫都會根據傳遞的參數類型,替換為對CHARINDEX_VARCHAR
或CHARINDEX_NVARCHAR
用戶自定義函式的呼叫,這些函式是在用戶資料庫下的架構名稱s2ss
中創建的,以模擬 SAP ASE 的行為。 - 若要使用 SQL Server/Azure SQL 行為,請選擇 [保留目前的語法。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 保留目前的語法 |
樂觀的 | 保留目前的語法 |
滿 | 替換函式 |
DATALENGTH 函式
當值是單一空格時,DATALENGTH
函式所傳回的值與 SQL Server/Azure SQL 和 ASE 不同。 在此情況下,SQL Server/Azure SQL 會傳回 0
,而 ASE 會傳回 1
。
- 若要使用 ASE 行為,請選取 Replace 函式。 所有對
DATALENGTH
函式的呼叫都會取代為CASE
表示式,以模擬 SAP ASE 行為。 - 若要使用預設的 SQL Server/Azure SQL 行為,請選擇 [保留目前的語法。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 保留目前的語法 |
樂觀的 | 保留目前的語法 |
滿 | 替換函式 |
INDEX_COL函式
ASE 支援 INDEX_COL
函式的選擇性 user_id
自變數;不過,SQL Server/Azure SQL 不支援此自變數。 如果您使用 user_id
自變數,則此函式無法轉換成 SQL Server/Azure SQL 語法。
- 若要使用 ASE 行為,請選擇 轉換函式。 如果程式代碼包含
user_id
自變數,SSMA 會顯示錯誤。 - 若要在每次遇到
INDEX_COL
時顯示錯誤訊息,請選取 標示為錯誤。 SSMA 不會將對函式的參考轉換,而且會在語句上加上錯誤註解。
模式 | 價值 |
---|---|
預設 | 標記錯誤 |
樂觀的 | 標記並出現錯誤 |
已滿 | 標記並出現錯誤 |
INDEX_COLORDER函式
SQL Server/Azure SQL 沒有 INDEX_COLORDER
系統函式。
- 若要使用 ASE 行為,請選擇 轉換函式。 所有對
INDEX_COLORDER
函數的呼叫都被替換為呼叫具有相同名稱的使用者定義函數INDEX_COLORDER
(在架構名稱s2ss
下建立的使用者資料庫中),以模擬 SAP ASE 的行為。 - 若要在每次遇到
INDEX_COLORDER
時列印錯誤訊息,請選取 [標示並錯誤]。 SSMA 不會轉換對函式的參考,並會以錯誤批註標記語句。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 標記並出現錯誤 |
樂觀的 | 標記錯誤 |
滿 | 標記並出現錯誤 |
LEFT 和 RIGHT(左和右)函式
ASE 中的 LEFT
和 RIGHT
函式對於負長度參數的行為不同。
- 若要使用 ASE 行為,請選擇 [取代函數]。 然後,length 參數會取代為
CASE
表達式,以傳回負值NULL
。 - 若要使用 SQL Server 行為,請選擇 [保留目前的語法。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 保留目前的語法 |
樂觀的 | 保留目前的語法 |
滿滿的 | 取代函式 |
注意
如果 length 參數是常值而非複雜運算式,則長度值一律會取代為 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 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 標記錯誤 |
樂觀的 | 標記錯誤 |
滿的 | 標記錯誤 |
預設/樂觀/完整模式: 標記錯誤
PATINDEX 函式
指定是否轉換 PATINDEX
函式以符合 SAP ASE 行為。 重點是 ASE 會移除搜尋模式中的尾端空白。 因應措施是將實值表達式轉換成具有最大精確度的固定長度數據類型,並將 rtrim
函式套用至搜尋模式。
- 若要使用 ASE 模式,請選擇 並使用。
- 若要使用預設的 SQL Server/Azure SQL 行為,請選擇 [不要使用。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 請勿使用 |
樂觀的 | 請勿使用 |
滿 | 用 |
REPLICATE 函式
REPLICATE
函式會重複指定次數的字串。 在 ASE 中,如果您指定重複字串零次,則結果會 NULL
。 在 SQL Server/Azure SQL 中,結果是空字串。
- 若要使用 ASE 行為,請選取 Replace 函式。 所有對
REPLICATE
函式的呼叫都被替換為根據傳遞參數類型,呼叫用戶定義函式REPLICATE_VARCHAR
或REPLICATE_NVARCHAR
。這些函式是在用戶資料庫中結構名稱為s2ss
下建立,為的是模擬 SAP ASE 行為。 - 若要使用預設的 SQL Server/Azure SQL 行為,請選取 [取代函式] 。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 取代函式 |
樂觀的 | 取代函式 |
滿 | 替換函式 |
TRIM(LTRIM,RTRIM) 函式
此設定會指定要使用 SAP ASE 對等語法函式或保留目前語法函式來取代對 TRIM
、LTRIM
和 RTRIM
函式的呼叫。 這個特定設定有下列選項:
- Replace 功能
- 保留目前的語法
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 取代函式 |
樂觀的 | 替換函數 |
滿 | 取代函式 |
SUBSTRING 函式
在 ASE 中,如果指定的起始值大於運算式中的字元數,或長度等於零,則函式 SUBSTRING(expression, start, length)
會傳回 NULL
。 在 SQL Server/Azure SQL 中,對等運算式會傳回空字串。
- 若要使用 ASE 行為,請選取 Replace 函式。 所有對
SUBSTRING
函式的呼叫都會被取代為呼叫SUBSTRING_VARCHAR
、SUBSTRING_NVARCHAR
或SUBSTRING_VARBINARY
使用者定義函式,這些函式是根據傳遞的參數類型來選擇的(在使用者資料庫中,依據架構名稱s2ss
創建),以模擬 SAP ASE 的行為。 - 若要使用 SQL Server/Azure SQL 行為,請選擇 [保留目前的語法。
當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:
模式 | 價值 |
---|---|
預設 | 保留目前的語法 |
樂觀的 | 保留目前的語法 |
滿 | 取代函式 |
表格區段
新增主鍵
如果 SAP ASE 數據表沒有主鍵或唯一索引,請在 SQL Server 或 Azure SQL 資料表中建立新的主鍵。
模式 | 價值 |
---|---|
預設 | 不 |
樂觀的 | 不 |
滿 | 是的 |
注意
連線到 Azure SQL 時,預設為 [是]。