Access SQL と SQL Server TSQL の比較

適用先
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Access データを SQL Server に移行する場合、またはバックエンド データベースとして SQL Server を使用して Access ソリューションを作成する場合は、Access SQL と SQL Server Transact SQL (TSQL) の違いを把握することが重要です。 ソリューションが意図したとおりに動作するように、知っておくべき重要なバリエーションを次に示します。

詳細については、「Access SQL: 基本的な概念、ボキャブラリ、構文」および「Transact-SQL リファレンス」を参照してください

構文と式の違い

変換する必要がある構文と式の違いがいくつかあります。 次の表は、最も一般的なものをまとめたものです。

差異 Access SQL SQL Server TSQL
リレーショナル データベースの属性 通常フィールドと呼ばれる 通常フ列と呼ばれる
文字列リテラル "Mary Q. Contrary" のような引用符 (") 'Mary Q. Contrary' のようなアポストロフィ (')
日付リテラル #1/1/2019# のようなシャープ記号 (#) '1/1/2019' のようなアポストロフィ (')
複数のワイルドカード文字 "Cath*" のようなアスタリスク (*) 'Cath%' のようなパーセント (%)
単一のワイルドカード文字 "Cath?" のような疑問符 (?) "Cath_" のようなアンダースコア (_)
剰余演算子 Value1 MOD Value2 のような MOD 演算子 Value1 % Value2 のようなパーセント (%)
ブール値 WHERE Bitvalue = [True | False]
または
WHERE Bitvalue = [-1 | 0]
WHERE Bitvalue = [1 | 0]
パラメーター [<定義された列ではない名前>]
または
SQL ビューで、SQL パラメーター宣言を使用します
@ParamName

  • Access では、テーブル名とオブジェクトを囲む引用符 (") を使用します。 T-SQL は、スペースを含むテーブル名に使用することができますが、標準の命名法ではありません。 ほとんどの場合、オブジェクト名はスペースなしで名前を変更する必要がありますが、クエリも新しいテーブル名を反映するように書き換える必要があります。 名前を変更できないが、命名標準に準拠していないテーブルには、角かっこ [ ] を使用します。 Access では、クエリ内のパラメーターを囲むかっこも追加されますが、T-SQL では削除できます。

  • 正規日付形式である yyyy-mm-dd hh:nn:ss を使用することを検討してください。これは、文字として保存された日付の ODBC 標準であり、データベース間でそれらを表現する一貫した方法を提供し、日付の並べ替え順序を保持します。

  • ブール値を比較するときの混乱を避けるために、Access と SQL Server の次の比較を使用できます。

    • false 値のテスト WHERE Bitvalue = 0
    • 真の値をテストする WHERE Bitvalue <> 0

Null 値

null 値は、"値がまったくない" ことを意味する空のフィールドではありません。 Null 値は、データが見つからないか、不明であることを示すプレースホルダーです。 null 値を認識するデータベース システムは、"3 値ロジック" を実装します。これは、何かが true、false、または不明であることを意味します。 null 値を適切に処理しないと、等価比較を行ったり WHERE 句を評価したりするときに、正しくない結果が得られる可能性があります。 Access と SQL Server が Null 値を処理する方法を比較します。

テーブルの Null 値を無効にする

Access と SQL Server では、既定値として Null 値が有効になっています。 テーブルの列の Null 値を無効にするには、次の操作を行います。

  • Access で、フィールドの [必須] プロパティを [はい] に設定します。
  • SQL Server で、CREATE TABLE ステートメントの列に NOT NULL 属性を追加します。

WHERE 句で Null 値をテストする

IS NULL および IS NOT NULL 比較述語を使用する:

  • Access で、IS NULL または IS NOT NULL を使用します。 次に例を示します。

    SELECT … WHERE column IS NULL.
    
  • SQL ​​Server で、IS NULL または IS NOT NULL を使用します。 次に例を示します。

    SELECT … WHERE field IS NULL
    

関数を使用して Null 値を変換する

Null 関数を使用して式を保護し、代替値を返します。

  • Access で、0 または別の値を返す NZ (value, [valueifnull]) 関数を使用します。 次に例を示します。

    SELECT AVG (NZ (Weight, 50) ) FROM Product
    
  • SQL Server で、0 または別の値を返す ISNULL (Value, replacement_value) 関数を使用します。 次に例を示します。

    SELECT AVG (ISNULL (Weight, 50)) FROM Product
    

データベース オプションを理解する

データベース システムによっては、固有のメカニズムがあります。

  • Access では、Null に関連するデータベース オプションはありません。
  • SQL Serverでは、 = 演算子と <> 演算子を使用して NULL と直接等しい比較を行う場合は、SET ANSI_NULLS OFF オプションを使用できます。 このオプションは廃止されるため、使用しないことをお勧めします。また、ISO に準拠して Null を処理している他のユーザーが混乱する可能性があります。

変換とキャスト

データやプログラミングを使用している場合は、常にあるデータ型から別のデータ型に変換する必要があります。 変換処理は、単純なものから複雑なものまであります。 考慮する必要がある一般的な問題は、暗黙的または明示的な変換、現在の日時の地域設定、数値の四捨五入または切り捨て、およびデータ型のサイズです。 完全なテストと結果の確認に代わるものはありません。

Access では、データ型ごとに 1 つずつ、文字 C で始まる 11 個あるデータ型変換関数を使用します。 たとえば、浮動小数点数を文字列に変換するには、次のようにします。


CStr(437.324) returns the string "437.324".

SQL Serverでは、主に CAST 関数と CONVERT TSQL 関数を使用しますが、特殊なニーズに対応する変換関数は他にもあります。 たとえば、浮動小数点数を文字列に変換するには、次のようにします。


CONVERT(TEXT, 437.324) returns the string "437.324"

DateAdd、DateDiff、および DatePart 関数

これらの一般的に使用される日付関数は、Access と TSQL ではよく似ていますが (DateAdd、DateDiff、およびDatePart)、最初の引数の使用方法は異なります。

  • Access では、最初の引数は interval と呼ばれ、引用符を必要とする文字列式です。

  • SQL Serverでは、最初の引数は datepart と呼ばれ、引用符を必要としないキーワード (keyword)値を使用します。

    コンポーネント Access SQL Server
    "yyyy" year, yy, yyyy
    四半期 "q" quarter, qq, q
    "m" month, mm, m
    年間通算日 "y" dayofyear, dy, y
    "d" day, dd, d
    "ww" wk, ww
    曜日 "w" weekday, dw
    時間 "h" hour, hh
    "n" minute, mi, n
    "s" second, ss, s
    ミリ秒 millisecond, ms

関数の比較

Access クエリには、関数を使用して結果を取得することがある計算列を含めることができます。 クエリを SQL Server に移行するとき、Access 関数を使用できる場合は、同等の TSQL 関数に置き換える必要があります。 対応する TSQL 関数がない場合は、通常、 計算列 (計算列 に使用される TSQL 用語) を作成して、必要な操作を実行できます。 TSQL にはさまざまな関数があり、利用できる内容を確認することはお客様のメリットです。 詳細については、「 SQL データベース関数とは」を参照してください。

次の表は、対応する TSQL 関数を持つ Access 関数を示しています。

Access カテゴリ Access 関数 TSQL 関数
コンバージョン Chr 関数 CHAR
コンバージョン Day 関数 DAY
コンバージョン FormatNumber 関数 形式
コンバージョン FormatPercent 関数 形式
コンバージョン Str 関数 Str
コンバージョン データ型変換関数 CAST と CONVERT
日時 DATE 関数 CURRENT_TIMESTAMP
日時 Day 関数 DATEFROMPARTS
日時 DateAdd 関数 Dateadd
日時 DateDiff 関数 Datediff
DATEDIFF_BIG
日時 DatePart 関数 Datepart
日時 DateSerial 関数 DATEFROMPARTS
日時 DateValue 関数 DATENAME
日時 Hour 関数 TIMEFROMPARTS
日時 Minute 関数 TIMEFROMPARTS
日時 Month 関数 MONTH
日時 Now 関数 SYSDATETIME
日時 Second 関数 TIMEFROMPARTS
Time 関数 TIMEFROMPARTS
日時 TimeSerial 関数 TIMEFROMPARTS
日時 Weekday 関数 Datepart
DATENAME
日時 Year 関数 YEAR
DATEFROMPARTS
定義域集計 DFirst, DLast Functions FIRST_VALUE
LAST_VALUE
計算 Abs 関数 ABS
計算 Atn 関数 ATAN
ATN2
計算 Cos 関数 COS
ACOS
計算 Exp 関数 EXP
計算 Int, Fix Functions FLOOR
計算 Log 関数 LOG
LOG10
計算 Rnd 関数 RAND
計算 Round 関数 ROUND
計算 Sgn 関数 SIGN
計算 Sin 関数 SIN
計算 Sqr 関数 SQRT
プログラム フロー Choose 関数 CHOOSE
プログラム フロー IIf 関数 Iif
統計 Avg 関数 平均
SQL 集合関数 Count 関数 COUNT
COUNT_BIG
SQL 集合関数 Min 関数および Max 関数 MIN
MAX
SQL 集合関数 StDev 関数および StDevP 関数 STDEV
STDEVP
SQL 集合関数 Sum 関数 SUM
SQL 集合関数 Var 関数および VarP 関数 VAR
VARP
文字列 Format 関数 形式
テキスト LCase 関数 LOWER
テキスト Left 関数
テキスト Len 関数 Len
テキスト LTrim 関数、RTrim 関数、および Trim 関数 TRIM
LTRIM
RTRIM
テキスト Replace 関数 置き換える
テキスト Right 関数 そうです
テキスト StrReverse 関数
テキスト UCase 関数 UPPER