プロジェクトの設定 (変換) (SybaseToSQL)

[プロジェクト設定] ダイアログ ボックスの [変換] ページには、SSMA が SAP Adaptive Server Enterprise (ASE) 構文を SQL Server または Azure SQL 構文に変換する方法をカスタマイズする設定が含まれています。

[変換] ウィンドウは、[プロジェクト設定] ダイアログ ボックスと [既定のプロジェクト設定] ダイアログ ボックスで使用できます:

  • すべての SSMA プロジェクトの設定を指定する場合は、 [ツール] メニューの [既定のプロジェクト設定] を選択し、左側のウィンドウの下部にある [全般] をクリックし、[変換] をクリックします。

  • 現在のプロジェクトの設定を指定するには、[ツール] メニューの [プロジェクト設定] を選択し、左側のウィンドウの下部にある [全般] をクリックし、[変換] をクリックします。

その他のセクション

@@ERROR

SQL Server/Azure SQL と ASE では、異なったエラー コードが使用されます。

この設定を使用して、ASE コードで@@ERRORへの参照が検出されたときに SSMA が [出力] または [エラー一覧] ウィンドウに表示するメッセージの種類 (警告またはエラー) を 指定します。

  • [変換して警告でマーク] を選択すると、SSMA によってステートメントが変換され、警告コメントを付けます。
  • [エラーでマーク] を選択した場合、SSMA は変換をスキップし、ステートメントにエラー コメントを付けます。

[モード] ボックスで [変換モード] を選択すると、SSMA によって次の設定が適用されます:

モード
既定 変換して警告でマーク
オプティミスティック 変換して警告でマーク
フル エラーでマーク

LIKE 演算子の変換

SAP ASE の動作に一致するようにLIKEオペランドを変換するかどうかを指定します。 ポイントは、ASE が同様のパターンで末尾の空白をトリミングすることです。 回避策は、正しい式を最大有効桁数で固定長データ型にキャストすることです。

  • [単純変換] を選択すると、修正せずに式を変換できます。
  • ASE 動作を使用するには、[固定長にキャスト] を選択します 。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 単純変換
オプティミスティック 単純変換
フル 固定長にキャスト

空の文字列を数値型に変換またはキャストする

データ型引数として数値型を持つCONVERTまたはCAST式内の、空または空白の文字列を処理する方法を指定します。 この設定では、次のオプションを使用できます:

  • [単純変換] を選択すると、修正せずに式を変換できます。
  • 数値が 0 の空の文字列が選択されている場合、文字列パラメーター{s}CASE ltrim(rtrim({s})) WHEN "" THEN 0 else {s} END式に置き換えられます。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 単純変換
オプティミスティック 単純変換
フル 空の文字列 (ゼロ数値)

NULL の連結

この設定では、NULLを使用して文字列連結を変換する方法を指定します。 この設定では、次のオプションを設定できます:

  • ISNULL 関数でラップオプションが選択されている場合、連結内のすべての非定数string_expressionISNULL(string_expression)でラップされ、NULL は空の文字列に置き換えられます。
  • [現在の構文を保持] では、元の構文が維持されます。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 現在の構文を維持
オプティミスティック 現在の構文を維持
フル ISNULL 関数でラップする

空の文字列の変換

この設定では、空の文字列を変換する方法を指定します。 この設定では、次のオプションを設定できます:

  • すべての文字列式をスペースに置き換える
  • 空の文字列定数をスペースに置き換える

SQL Server/Azure SQL の動作を使用するには、[現在の構文を保持] を選択します。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 現在の状態を保持する
オプティミスティック 現在の状態を保持する
フル すべての文字列式をスペースに置き換える

バイナリ文字列変換を変換またはキャストする

バイナリ値を数値に変換すると、プラットフォームごとに異なる値が返される可能性があります。 たとえば x86 プロセッサでは、 CONVERT(integer, 0x00000100) はASE では65536と返されますが、SQL Server では256と返されます。 またASE では、バイトオーダーに応じて異なる値が返されます。

SSMA がバイナリ値を含む式CONVERTCASTを変換する方法を設定するには、次の設定を使用します:

  • [単純変換] を選択すると、警告や修正を行わずに式を変換できます。 ASE サーバーにバイナリ値を変更する必要がないバイトオーダーがあることがわかっている場合は、この設定を使用してください。
  • SQL Server で使用する式を SSMA で変換/修正するには、[変換して修正] を選択します。 リテラル定数のバイトオーダーは逆になります。 他のすべてのバイナリ値 (バイナリ変数や列など) は、エラーでマークされます。 ASE サーバーにバイナリ値の変更を必要とするバイトオーダーがあることがわかっている場合は、この値を使用してください。

SSMA で式を変換して修正し、変換されたすべての式を警告コメントでマークするには、[変換して警告でマーク] を選択します。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 変換して警告でマーク
オプティミスティック 単純変換
フル 変換して修正する

動的 SQL

この設定を使用して、ASE コードで動的 SQL が検出されたときに SSMA が [出力] または [エラー一覧] ウィンドウに表示するメッセージの種類 (警告またはエラー) を指定します。

  • [変換して警告でマーク] を選択すると、SSMA は動的 SQL を変換し、ステートメントに警告コメントを付けます。
  • [エラーでマーク] を選択した場合、SSMA は変換をスキップし、ステートメントにエラー コメントを付けます。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 変換して警告でマーク
オプティミスティック 変換して警告でマーク
フル エラーでマーク

等値チェックの変換

SQL Server/Azure SQL では、ANSI_NULLS設定がオンの場合、等価比較にNULL値が含まれている際に SQL Server/Azure SQL がUNKNOWNを返します。 ANSI_NULLSがオフの場合、比較列と式または 2 つの式が両方ともNULLの際に、NULL値を含む等値比較は true を返します。 既定 (ANSINULL OFF)では、 SAP ASE の等値比較は、ANSI_NULLS OFFの場合のSQL Server/Azure SQL と同様に動作します。

  • [単純変換] を選択した場合、SSMA はNULL値を追加チェックすることなく、ASE コードを SQL Server/Azure SQL 構文に変換します。 この設定は、ANSI_NULLSが SQL Server/Azure SQL 内でOFFである場合、またはケースごとに等価比較を変更したい場合に使用します。
  • [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が検出された場合、変数を使用して文字列リテラルを作成するか、新しい変数を作成し、その変数を使用して文字列を作成できます。

  • 文字列リテラルをPRINTRAISERROR関数に使用するには、[新しい文字列の作成] を選択します。

    このモードでは、PRINT ステートメントまたは RAISERROR ステートメントがプレースホルダーおよびローカル変数を使用しない場合、ステートメントは変更されません。 PRINT 文字列リテラルでは、2 つのパーセント文字 (%%) が 1 つのパーセント文字 (%) に変更されます。

    次の例のように、PRINT ステートメントまたは RAISERROR ステートメントでプレースホルダーと 1 つ以上のローカル変数を使用する場合:

    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 構文に準拠するため、すべての 2 つのパーセント文字 (%%) を 1 つのパーセント文字に置き換えます。

    以下の例のように、PRINTRAISERRORのステートメントがプレースホルダーを使用し、かつ 1 つ以上のローカル変数が使用されている場合:

    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 によって次の設定が適用されます:

モード
既定 新しい文字列の作成
オプティミスティック 新しい文字列の作成
フル 新規変数の作成

timestamp 列に明示的な値を挿入できません。

SQL Server/Azure SQL では、タイムスタンプ列への明示的な値の挿入はサポートされていません。

  • タイムスタンプ列をINSERTステートメントから除外するには、[列の除外] を選択 します。
  • タイムスタンプ列がINSERTステートメント内にあるたびにエラー メッセージを表示するには、[エラーでマーク] を選択します。 このモードでは、 INSERT ステートメントは変換されず、エラー コメントでマークされます。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 列を除外する
オプティミスティック 列を除外する
フル エラーでマーク

プロシージャで定義されている一時オブジェクトを格納する

この設定では、プロシージャに表示される一時オブジェクト定義を変換時にソース メタデータに格納するかどうかを指定します。

  • [はい] を選択してメタデータに格納します。
  • オブジェクトを保存する必要がない場合は、[いいえ] を選択します。
モード
既定 はい
オプティミスティック はい
フル いいえ

プロキシ テーブルの変換

ASE プロキシ テーブルを 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_NULLOFFされていることを前提としており、NULL引数のチェックは行いません。
  • フル モードでは、SSMA は引数をNULLチェックします。
  • arg-list引数を持つRAISERROR は変換されません。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 30001
オプティミスティック 30001
フル 30001

システム オブジェクト

この設定を使用して、ASE システム オブジェクトの使用が発生したときに SSMA が [出力] または [エラー一覧] ウィンドウに表示するメッセージの種類 (警告またはエラー) を指定します。

  • [変換して警告でマーク] を選択すると、SSMA はシステム オブジェクトへの参照を変換し、ステートメントに警告コメントを付けます。
  • [エラーでマーク] を選択した場合、SSMA はシステム オブジェクトへの参照を変換せず、エラー コメントを含むステートメントをマークします。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 変換して警告でマーク
オプティミスティック 変換して警告でマーク
フル エラーでマーク

未解決の識別子

この設定を使用して、識別子を解決できない場合に SSMA が [出力] または [エラー一覧] ウィンドウに表示するメッセージの種類 (警告またはエラー) を指定します。

  • [変換して警告でマーク] を選択すると、SSMA は参照を未解決の識別子に変換しようと試み、ステートメントに警告コメントを付けます。
  • [エラーでマーク] を選択した場合、SSMA は参照を未解決の識別子に変換せず、ステートメントにエラー コメントを付けます。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 変換して警告でマーク
オプティミスティック 変換して警告でマーク
フル エラーでマーク

システム関数セクション

charindex 関数

ASE では、 CHARINDEXはすべての入力式がNULLの場合にのみNULLを返します。 入力式にNULLがある場合、 SQL Server/Azure SQL はNULLを返します。

  • ASE 動作を使用するには、[関数の置換] を選択します。 CHARINDEX関数へのすべての呼び出しは、SAP ASE の動作をエミュレートするために渡されたパラメーターの種類 (スキーマ名s2ssでユーザー データベースに作成) に基づいて、CHARINDEX_VARCHARまたはCHARINDEX_NVARCHARのいずれかのユーザー定義関数の呼び出しに置き換えられます。
  • SQL Server/Azure SQL の動作を使用するには、[現在の構文を保持] を選択します。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 現在の構文を保持
オプティミスティック 現在の構文を保持
フル 関数の置換

DATALENGTH 関数

SQL Server/Azure SQL と ASE では、値が 1 つの領域である場合に DATALENGTH 関数によって返される値が異なります。 この場合、SQL Server/Azure SQL は0を返し、ASE は1を返します。

  • ASE 動作を使用するには、[関数の置換] を選択します。 DATALENGTH関数へのすべての呼び出しは、SAP ASE の動作をエミュレートするCASE式に置き換わります。
  • 既定の 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関数へのすべての呼び出しは、SAP ASE の動作をエミュレートする、INDEX_COLORDERと同じ名前を持つユーザー定義関数の呼び出し (スキーマ名s2ssでユーザー データベースに作成) に置き換えられます。
  • INDEX_COLORDERを検出するたびにエラー メッセージを出力するには、[エラーでマーク] を選択します。 SSMA は関数への参照を変換せず、ステートメントにエラー コメントを付けます。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 エラーでマーク
オプティミスティック エラーでマーク
フル エラーでマーク

LEFT 関数と RIGHT 関数

ASE でのLEFTRIGHT関数の動作は、負の length パラメーターでは異なります。

  • ASE 動作を使用するには、[関数の置換] を選択します。 length パラメーターは、負の値にNULLを返すCASE式に置き換えられます。
  • SQL Server の動作を使用するには、[現在の構文を保持] を選択します。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 現在の構文を保持
オプティミスティック 現在の構文を保持
フル 関数の置換

注意

length パラメーターがリテラル値であり、複合式ではない場合、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 関数

SAP ASE の動作に一致するようにPATINDEX関数を変換するかどうかを指定します。 ポイントは、ASE が検索パターンの末尾の空白をトリミングすることです。 回避策は、最大有効桁数の固定長データ型に値式をキャストし、検索パターンにrtrim関数を適用することです。

  • ASE 動作を使用するには、[使用] を選択します。
  • 既定の SQL Server/Azure SQL 動作を使用するには、[使用しない] を選択します。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 使用しない
オプティミスティック 使用しない
フル 用途

関数の複製

REPLICATE関数は、指定された回数だけ文字列を繰り返します。 ASE では、文字列を 0 回繰り返すように指定すると、結果はNULLになります。 SQL Server/Azure SQL では、結果は空の文字列になります。

  • ASE 動作を使用するには、[関数の置換] を選択します。 REPLICATE関数へのすべての呼び出しは、SAP ASE の動作をエミュレートするために渡されたパラメーターの種類 (スキーマ名REPLICATE_VARCHARでユーザー データベースに作成) に基づいて、REPLICATE_NVARCHARまたはs2ssのいずれかのユーザー定義関数の呼び出しに置き換えられます。
  • 既定の SQL Server/Azure SQL 動作を使用するには、[関数の置換] を選択します。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 関数の置換
オプティミスティック 関数の置換
フル 関数の置換

TRIM (LTRIM, RTRIM) 関数

この設定では、TRIMLTRIMRTRIM関数への呼び出しを SAP ASE と同等の構文関数に置き換えるか、もしくは現在の構文を保持するかを指定します。 この設定には、次のオプションがあります:

  • 関数の置換
  • 現在の構文を保持

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 関数の置換
オプティミスティック 関数の置換
フル 関数の置換

SUBSTRING 関数

ASE では、式内の文字数より大きい開始値が指定された場合、または長さが 0 の場合、SUBSTRING(expression, start, length)関数はNULLを返します。 SQL Server/Azure SQL では、同等の式は空の文字列を返します。

  • ASE 動作を使用するには、[関数の置換] を選択します。 SUBSTRING関数へすべての呼び出しは、SAP ASE の動作をエミュレートするために渡されたパラメーターの種類 (スキーマ名s2ssでユーザー データベースに作成) に基づいて、SUBSTRING_VARCHARSUBSTRING_NVARCHAR、またはSUBSTRING_VARBINARYのいずれかのユーザー定義関数に置き換えられます。
  • SQL Server/Azure SQL の動作を使用するには、 [現在の構文を保持] を選択します。

[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:

モード
既定 現在の構文を保持
オプティミスティック 現在の構文を保持
フル 関数の置換

テーブル セクション

主キーを追加する

SAP ASE テーブルに主キーまたは一意のインデックスがない場合は、SQL Server または Azure SQL テーブルに新しい主キーを作成します。

モード
既定 いいえ
オプティミスティック いいえ
フル はい

注意

Azure SQL に接続すると、既定では [はい] になります。

参照

ユーザー インターフェイス リファレンス (SybaseToSQL)