CData Software Blog

クラウド連携のCData Software の技術ブログです。

別カラムの値で更新を行うUPDATE文をサポート:UPDATE Table SET Column1 = Column2;

f:id:sugimomoto:20210608223614p:plain

こんにちは。CData Software Japanリードエンジニアの杉本です。

今回はCData Driver V21でひっそり追加されていた新機能、UPDATE文による別カラムの値コピーを紹介したいと思います!

UPDATE文を使って別カラムの値のコピー

SQLで示すと単純で、以下のようなUPDATE文を実行する時に外のカラムの値で更新を行う、という機能です。

UPDATE Table SET Column1 = Column2;

この機能は更新をサポートしている多くのドライバーで共通の機能となります。(APIの仕様によってはサポートしていないデータソースもあるので注意してください。)

今回は例として、CData Salesforce JDBC Driverで試してみます。

www.cdata.com

f:id:sugimomoto:20210608223115p:plain

例えば、Salesforce の取引先(Account)に存在するBillingCityに対して、それぞれの企業名:Nameのカラムの値をコピーしてみます。

以下のようなSQLで実行できます。

UPDATE Account SET BillingCity = Name;

せっかくなのでGIFアニメを撮ってみました。

https://cdatajbuilds.s3-ap-northeast-1.amazonaws.com/CDataBlog/updatebycolumn.gif

Nameの値がまるまるコピーされているのが確認できますね。

また、前述の通りDriverの共通機能なので、例えばkintone Driverでもこの機能が利用できます。

www.cdata.com

以下のように「顧客リスト」アプリの中で値をコピーしてみました。

UPDATE [顧客リスト] SET [担当者名] = [会社名];

f:id:sugimomoto:20210608223124p:plain

もちろんしっかりとKintoneにも反映されています。

f:id:sugimomoto:20210608223130p:plain

SQL関数もサポート

また、SQL関数の利用もサポートされているので、

例えば、他のカラムに入力されている文字列の桁数を計算した値を別なカラムに格納したり

UPDATE Account SET BillingStreet = CHAR_LENGTH(Name);

LastNameとFirstNameを結合して、値を更新するみたいなこともできます。

UPDATE Contact SET Name = CONCAT(LastName,'-',FirstName);

SalesforceやKintoneなどのSaaSデータ管理・クリーンナップで役立つ機能ではないでしょうか。

サポートされているSQL関数に関しては、以下のヘルプを参照してみてください。

cdn.cdata.com

f:id:sugimomoto:20210608223138p:plain

おわりに

CData Driver は外部のWeb APIに依存する関係上、どうしてもRDB向けのSQLよりも制約が発生してしまうシチュエーションがあります。

ただ、このような形で日々対応できる機能を追加していってますので、もし「SQLのこの機能は使えないの?」といったことがありましたら、お気軽に相談ください!

https://www.cdata.com/jp/support/submit.aspx