Access SQL と SQL Server TSQL の比較
Applies ToAccess 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

    • True 値のテスト    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 では、= および <> 演算子を使用して、SET ANSI_NULLS OFF オプションを使用して、NULL と直接等式比較できます。 このオプションは廃止されるため、使用しないことをお勧めします。また、ISO に準拠して Null を処理している他のユーザーが混乱する可能性があります。

変換とキャスト

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

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

CStr(437.324) returns the string "437.324".

SQL Server では、主に キャストおよび変換 TSQL 関数を使用しますが、特別なニーズのための変換関数は他にもあります。 たとえば、浮動小数点数を文字列に変換するには、次のようにします。

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

DateAdd、DateDiff、および DatePart 関数

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

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

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

    コンポーネント

    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 関数

FORMAT

変換

FormatPercent 関数

FORMAT

変換

Str 関数

STR

変換

データ型変換関数

CAST and 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 関数

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 関数

FORMAT

テキスト

LCase 関数

LOWER

テキスト

Left 関数

LEFT

テキスト

Len 関数

LEN

テキスト

LTrim 関数、RTrim 関数、および Trim 関数

TRIM

LTRIM

RTRIM

テキスト

Replace 関数

REPLACE

テキスト

Right 関数

RIGHT

テキスト

StrReverse 関数

REVERSE

テキスト

UCase 関数

UPPER

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。