共用方式為


專案設定 (轉換) (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 成數值型別

指定如何處理具有數值型別做為資料類型引數之 CONVERTCAST 運算式內的空白字串。 下列選項適用於此設定:

  • 選取 [簡單轉換] 以轉換運算式而不進行任何更正。
  • 如果選取 [空字串作為零數值],則會以 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 NULLIS NOT NULL 子句來新增 NULL 值檢查。

當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:

Mode
預設 簡單轉換
開放式 簡單轉換
完整 考慮 NULL 值

格式字串

SQL Server/Azure SQL 不再支援 PRINTRAISERROR 陳述式中的 format_string 引數。 format_string 引數允許將可取代的參數直接放在字串中,然後在執行階段取代參數。 相反地,SQL Server 需要使用字串常值或使用變數所建置的字串,來要求完整字串。 如需詳細資訊,請參閱 PRINT (Transact-SQL) 主題。

當 SSMA 遇到 format_string 引數時,可以使用變數來建置字串常值,或是建立新的變數,並使用該變數建置字串。

  • 若要針對 PRINTRAISERROR 函數使用字串常值,請選取 [建立新字串]。

    在此模式中,如果 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_NULLOFF。 因此,SSMA 不會檢查 Null 引數。

  • 若要讓 SSMA 為每個 PRINTRAISERROR 陳述式建置新的變數,然後將該變數用於字串值,請選取 [建立新的變數]。

    在此模式中,如果 PRINTRAISERROR 陳述式不使用預留位置和區域變數,SSMA 會以單一百分比字元取代所有雙百分比字元 (%%),以符合 SQL Server/Azure SQL 語法。

    如下列範例所示,如果 PRINTRAISERROR 陳述式使用預留位置和一或多個區域變數:

    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_NULLOFF,而且不會檢查 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_VARCHARCHARINDEX_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 中的 LEFTRIGHT 函數對於負長度參數有不同的行為。

  • 若要使用 ASE 行為,請選取 [取代函數]。 然後,長度參數會取代為會針對負值傳回 NULLCASE 運算式。
  • 若要使用 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_VARCHARREPLICATE_NVARCHAR 使用者定義函數的呼叫,具體取決於模擬 SAP ASE 行為而傳遞的參數類型 (在使用者資料庫中根據結構描述名稱 s2ss 所建立)。
  • 若要使用預設 SQL Server/Azure SQL 行為,請選取 [取代函數]。

當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:

Mode
預設 取代函數
開放式 取代函數
完整 取代函數

TRIM (LTRIM, RTRIM) 函數

此設定會指定要以 SAP ASE 對等語法函數取代對 TRIMLTRIMRTRIM 函數的呼叫,還是保留目前的語法。 在此特定設定中,有下列選項:

  • 取代函數
  • 保留目前的語法

當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:

Mode
預設 取代函數
開放式 取代函數
完整 取代函數

SUBSTRING 函數

在 ASE 中,如果指定大於運算式中字元數目的起始值,或長度等於零,則 SUBSTRING(expression, start, length) 函數會傳回 NULL。 在 SQL Server/Azure SQL 中,對等的運算式會傳回空字串。

  • 若要使用 ASE 行為,請選取 [取代函數]。 所有對 SUBSTRING 函數的呼叫都會取代為對 SUBSTRING_VARCHARSUBSTRING_NVARCHARSUBSTRING_VARBINARY 使用者定義函數的呼叫,具體取決於模擬 SAP ASE 行為而傳遞的參數類型 (在使用者資料庫中根據結構描述名稱 s2ss 所建立)。
  • 若要使用 SQL Server/Azure SQL 行為,請選取 [保留目前的語法]。

當您在 [模式] 方塊中選取轉換模式時,SSMA 會套用下列設定:

Mode
預設 保留目前的語法
開放式 保留目前的語法
完整 取代函數

資料表區段

新增主索引鍵

如果 SAP ASE 資料表沒有主索引鍵或唯一索引,請在 SQL Server 或 Azure SQL 資料表中建立新的主索引鍵。

Mode
預設 No
開放式 No
完整 Yes

注意

連線到 Azure SQL 時,預設為 [是]。

另請參閱

使用者介面參考 (SybaseToSQL)