プロジェクトの設定 (変換) (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_expression
がISNULL(string_expression)
でラップされ、NULL
は空の文字列に置き換えられます。 - [現在の構文を保持] では、元の構文が維持されます。
[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:
モード | 値 |
---|---|
既定 | 現在の構文を維持 |
オプティミスティック | 現在の構文を維持 |
フル | ISNULL 関数でラップする |
空の文字列の変換
この設定では、空の文字列を変換する方法を指定します。 この設定では、次のオプションを設定できます:
- すべての文字列式をスペースに置き換える
- 空の文字列定数をスペースに置き換える
SQL Server/Azure SQL の動作を使用するには、[現在の構文を保持] を選択します。
[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:
モード | 値 |
---|---|
既定 | 現在の状態を保持する |
オプティミスティック | 現在の状態を保持する |
フル | すべての文字列式をスペースに置き換える |
バイナリ文字列変換を変換またはキャストする
バイナリ値を数値に変換すると、プラットフォームごとに異なる値が返される可能性があります。 たとえば x86 プロセッサでは、 CONVERT(integer, 0x00000100)
はASE では65536
と返されますが、SQL Server では256
と返されます。 またASE では、バイトオーダーに応じて異なる値が返されます。
SSMA がバイナリ値を含む式CONVERT
とCAST
を変換する方法を設定するには、次の設定を使用します:
- [単純変換] を選択すると、警告や修正を行わずに式を変換できます。 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
が検出された場合、変数を使用して文字列リテラルを作成するか、新しい変数を作成し、その変数を使用して文字列を作成できます。
文字列リテラルを
PRINT
とRAISERROR
関数に使用するには、[新しい文字列の作成] を選択します。このモードでは、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_NULL
がOFF
であると想定します。 したがって、SSMA は null 引数をチェックしません。SSMA で
PRINT
とRAISERROR
の各ステートメントに新しい変数をビルドし、その変数を文字列値に使用するには、[新しい変数の作成] を選択します。このモードでは、
PRINT
かRAISERROR
のステートメントがプレースホルダーとローカル変数を使用していない場合、SSMA はSQL Server/Azure SQL 構文に準拠するため、すべての 2 つのパーセント文字 (%%
) を 1 つのパーセント文字に置き換えます。以下の例のように、
PRINT
かRAISERROR
のステートメントがプレースホルダーを使用し、かつ 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_NULL
がOFF
されていることを前提としており、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 でのLEFT
とRIGHT
関数の動作は、負の 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) 関数
この設定では、TRIM
、LTRIM
、 RTRIM
関数への呼び出しを SAP ASE と同等の構文関数に置き換えるか、もしくは現在の構文を保持するかを指定します。 この設定には、次のオプションがあります:
- 関数の置換
- 現在の構文を保持
[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:
モード | 値 |
---|---|
既定 | 関数の置換 |
オプティミスティック | 関数の置換 |
フル | 関数の置換 |
SUBSTRING 関数
ASE では、式内の文字数より大きい開始値が指定された場合、または長さが 0 の場合、SUBSTRING(expression, start, length)
関数はNULL
を返します。 SQL Server/Azure SQL では、同等の式は空の文字列を返します。
- ASE 動作を使用するには、[関数の置換] を選択します。
SUBSTRING
関数へすべての呼び出しは、SAP ASE の動作をエミュレートするために渡されたパラメーターの種類 (スキーマ名s2ss
でユーザー データベースに作成) に基づいて、SUBSTRING_VARCHAR
、SUBSTRING_NVARCHAR
、またはSUBSTRING_VARBINARY
のいずれかのユーザー定義関数に置き換えられます。 - SQL Server/Azure SQL の動作を使用するには、 [現在の構文を保持] を選択します。
[モード] ボックスで変換モードを選択すると、SSMA によって次の設定が適用されます:
モード | 値 |
---|---|
既定 | 現在の構文を保持 |
オプティミスティック | 現在の構文を保持 |
フル | 関数の置換 |
テーブル セクション
主キーを追加する
SAP ASE テーブルに主キーまたは一意のインデックスがない場合は、SQL Server または Azure SQL テーブルに新しい主キーを作成します。
モード | 値 |
---|---|
既定 | いいえ |
オプティミスティック | いいえ |
フル | はい |
注意
Azure SQL に接続すると、既定では [はい] になります。