AMG Solution

Dynamics 365独自の言語! X++入門講座《基本的なSQLの書き方》

feels

みなさまこんにちは。黒木です。
 
前回のブログでX++の概要、基礎をご紹介しました。今回はX++の特徴ともいえるSQLの書き方についてご紹介します。 

ソースコードにSQLを書くとは?

前回のブログでもご紹介しましたが、X++はコード上でSQLを書けば簡単にデータベースの操作ができるのが特徴です。
 
具体的にどういうことかというと、下記のようなプログラムになります。

 
5行目でint型やstr型と同じく変数宣言をし、7行目でtableAのレコード一件目をselectしています。そして、8行目で取得したレコードのculumn1というカラムの値をfield1に格納しています。
 
図に表すとこんなイメージです。
 

 
既にお気づきの方もいるかと思いますが、この時点でX++の癖の強さが出ています。firstonlyとは? * from抜けてない? その疑問についても、このブログで解説していきます!

SELECT文

ここからは一般的なSQL(Microsoft SQL Server)を例に解説していきます。まずはこちらのSQLです。

 
これをX++に変換すると…

こうなります。
 
SQLを書く上で大きく違う点は、order byの位置と結合条件の書き方の2つです。
 
X++でテーブルを結合したデータで並び替えの指定を行う場合、結合条件の前で指定します。なのでこの場合だと3行目と4行目の間でorder byを宣言してもOKです。また、group byも同じく結合条件の宣言前に記載する必要があります。
 
ついorder byは後ろに書きたくなりますが、この順番を間違えると;(セミコロン)がないよ(意訳)というエラーが出ます。X++触りたての頃にこのエラーで苦しめられたのも、今ではいい思い出です。
 
asc(昇順)、desc(降順)で指定します。指定がない場合、自動的に昇順に並び替えになります。
 
そして結合条件ですが、X++では「on」は使わず、whereを使用します。これは他の命令分でも共通です。条件を付け加えるときは&&で追加していきます。

UPDATE文

続いてはUPDATE文の紹介です。通常のSQLは、こう書きます。

 
X++のSQLでは、こうなります。

updataの時は処理の前後にttsbegin、ttscommitが必要です。大きく違うところは、「select」と「set」の記載があるかないかくらいです。ここはあまり癖の強さが出ていません。
 
ちなみに、先ほどからサンプルコードで登場しているRecIdというカラム。これもX++の特徴の1つです。RecIdはテーブル作成時に自動的に生成されるカラムで、そのテーブルにおいてキーになるカラムです。
 
これがとても便利で、単体テストを行うときに1行だけデータを変えたい、なんて時にUPDATE文でお世話になりました。

INSERT文

通常のSQLは、こうなります。

 
X++のSQLでは、こうなります。

insertでもupdataと同じく、処理の前後にttsbegin、ttscommitが必要です。

DELETE文

通常のSQLは、こうなります。

 
X++のSQLでは、こうなります。

DELETE文は、一般的なSQLとさほど変わりはないですね。もちろんこのサンプルプログラムを実行するとデータ全削除になるので、特定のレコードのみ削除する場合は「where」で条件を指定してください。

まとめ

いかがでしたでしょうか? 今回はX++におけるSQLの書き方をご紹介しました。
 
X++のことについて、まだまだ語りたいことがあるので随時ブログにあげていく予定です! それでは、また。
 
 
 
 
《関連記事》

feels

KUROKI'S BLOG

黒木の記事

黒木の記事の最新情報をお届けいたします。

SAME CATEGORY BLOG

この記事と同様のカテゴリー記事

日報で業務改善
はじめました。
LOADING