佐々木屋

技術的なことから趣味まで色々書きます

4.SQL(SQLServer)

NULLを考える②(COALESCE関数)

前回NULLの扱いで、NULLIF関数の話をしました。 これを使うと簡単に0除算エラーの対策が可能になります。 SELECT col_a / NULLIF(col_b, 0) FROM SomeTable 演算でNULLが来た場合はNULLを返す仕様をそのまま利用する形です。基本形はこれだけど、これだと結…

トリガーの登録

SQLServerのトリガ登録の覚えです。INSERTやUPDATEなどでテーブルに変更があった場合に処理を呼ぶ場合に使用するのが「トリガ」です。 トリガーはテーブルごとの設定になります。 CREATE TRIGGER [ トリガー名 ] ON [ 対象テーブル名 ] AFTER { [ INSERT] , …

NULLを考える①(NULLIF関数)

データベースを扱う上で必ずと言っていいほどお世話になる「NULL」さん。何もないという意味ですが、C#などのプログラミング言語に比べると、SQLのNULLは少し「できる奴」だと個人的には思います。ということで、NULLを扱う関数を全てではありませんが少し考…

MERGE文で高速に条件によってINSERT、UPDATE、DELETEを行う

INSERTかUPDATEかをSELECTしないで操作する方法を前回説明しました。 sasaki816.hatenablog.comこの方法だと、単純なテーブルによる更新処理であれば問題ありませんが、検索対象がより複雑なテーブルになると走査が多くなり低速になってしまいます。SQLServe…

datetime型から年、月、日、時、分などを操作

前回SQL-Serverのdatetime型の値を日付のみで比較操作するお話でしたが、日付ではなく年や日、時だったりと部分だけを操作する方法です。 前回同様のテーブルを考えます。 支店コード 支店名 アクセス日時 001 岐阜支店 2018-12-11 19:07:33 002 多治見支店 …

datetime型から日付を操作

SQL-Serverのdatetime型の値を日付のみだったり時間のみだったりで操作する方法です。 普段はプログラム側で制御する事が多いですが、結合やWHERE句での条件設定の際はよく使用します。 例えば、以下のテーブルを考えます。 支店コード 支店名 アクセス日時 …

INSERTかUPDATEかをSELECTで確認せずに実行する方法

SQL-Serverにてテーブルにデータを追加する場合の方法を考えます。 「絶対にキー重複しない」のであれば、単純にINSERTすればいいのですが、キー重複する可能性がある場合エラーとなりトランザクションが失敗する恐れがあります。 方法① DELETE→INSERT 俗に…

SQL Server 2008 R2 SP2 Express Edition のサイレントインストール

正直役に立つのか?分かりませんが、一応備忘録として。 情報がありそうでなかった(というよりは多すぎて取捨選択が大変)ので、まとめてみました。ここでのサイレントインストールはWindows7、8、8.1、10環境下で実行を想定しています。以下は私の使用して…

UPDATEでSELECTの結果を利用する

INSERT~SELECTのUPDATE版です。 SELECTの結果を利用してUPDATEしたい場合に利用します。UPDATEのWHERE句だけで対応出来ない場合ですね。 UPDATE tableA SET tableA.フィールド1 = tableB.フィールド1 ,tableA.フィールド2 = tableB.フィールド2 FROM tableB…