MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
SQL Server - 条件分岐のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
SQL Server - 条件分岐
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == SQL ServerのTransact-SQLで条件分岐(IF ~ ELSE)を実装する方法を記載する。<br> <br> また、IF文を記述すれば、WHERE句の内容を変えて検索できるが、<br> 条件ごとに同じようなSQL文を複数記述するのは面倒なので、1行で分岐できるIIF文を記載する。<br> <br><br> == 条件分岐を用いてテーブルを削除する == * '''SQLServer 2016以降''' :テーブル名はスキーマ.テーブル名と指定することもできる。 <source lang="sql"> DROP TABLE IF EXISTS [テーブル名] </source> <br> * '''SQL Server 2016以前''' :DROP TABLE IF EXISTS テーブル名が使用できないので、OBJECT_ID()関数を使用してテーブルの存在の有無を確認する。 :また、テーブル名は[スキーマ名].[テーブル名]と指定することもできる。 <source lang="sql"> IF OBJECT_ID(N'テーブル名', N'U') IS NOT NULL BEGIN DROP TABLE [テーブル名] END </source> <br> :一時テーブルも通常のテーブルと同様で、上記の手順で削除することが出来る。 :ストアドプロシージャとして実行している場合、実行後に一時テーブルが自動で削除されるが(存在の確認は不要)、コメントアウトしても構わない。 :また、コメントアウトしなくても特に問題は無いので、SSMSで操作する可能性がある場合は残しておいても構わない。 <source lang="sql"> IF OBJECT_ID(N'[#テーブル名]', N'U') IS NOT NULL BEGIN DROP TABLE [#テーブル名] CREATE TABLE [#テーブル名]( hoge INT, piyo NVARCHAR(20), huga VARBINARY(max)) END </source> <br><br> == IIF文 == SQL Server 2012からIF文を1つにまとめたIIF文が使用できる。<br> 評価の結果に基づいて、他の2つの引数のいずれかを返す。(ACCESSやVisual Basicでは馴染みの関数である)<br> <br> ===== IIF文の構文 ===== IIF文の第1パラメータの式がtrueであれば、第2パラメータを返して、falseであれば第3パラメータを返す。<br> <source lang="sql"> --IIF文でscoreカラムが70以上であれば合格、70未満は不合格とする SELECT score,IIF(score >= 70, '合格', '不合格') res FROM table1; </source> <br><br> == CASE WHEN文で条件分岐 == WHERE句の条件にCASE WHENを使用して、条件分岐を行う。<br> <br> ===== テーブルとデータの準備 ===== まず、テーブルとその検索用データを作成する。<br> <source lang="sql"> CREATE TABLE 社員マスタ ( 社員番号 INT, 氏名 VARCHAR(20), 部署 VARCHAR(20) ) </source> <br> <source lang="sql"> INSERT INTO 社員マスタ VALUES (1, '太郎さん', '営業部' ) INSERT INTO 社員マスタ VALUES (2, '次郎さん', '経理部' ) INSERT INTO 社員マスタ VALUES (3, '三郎さん', '人事部' ) INSERT INTO 社員マスタ VALUES (4, '四郎さん', '営業部' ) INSERT INTO 社員マスタ VALUES (5, '五郎さん', '経理部' ) INSERT INTO 社員マスタ VALUES (6, '六郎さん', '人事部' ) INSERT INTO 社員マスタ VALUES (7, '七郎さん', '営業部' ) INSERT INTO 社員マスタ VALUES (8, '八郎さん', '経理部' ) INSERT INTO 社員マスタ VALUES (9, '九郎さん', '人事部' ) </source> <br> ===== 条件を分岐させて検索 ===== 社員番号を指定せずに全件取得する場合と、社員番号を指定して1件のみに絞り込んだものを実行する。<br> <source lang="sql"> ; 全件検索 DECLARE @検索社員番号 int = NULL SELECT * FROM 社員マスタ WHERE 社員番号 = CASE WHEN @検索社員番号 IS NULL THEN 社員番号 ELSE @検索社員番号 END </source> <br> ; 実行結果 社員番号 氏名 部署 1 太郎さん 営業部 2 次郎さん 経理部 3 三郎さん 人事部 4 四郎さん 営業部 5 五郎さん 経理部 6 六郎さん 人事部 7 七郎さん 営業部 8 八郎さん 経理部 9 九郎さん 人事部 <br> <source lang="sql"> ; 社員番号を指定して取得 DECLARE @検索社員番号 int = 5 SELECT * FROM 社員マスタ WHERE 社員番号 = CASE WHEN @検索社員番号 IS NULL THEN 社員番号 ELSE @検索社員番号 END </source> <br> ; 実行結果 社員番号 氏名 部署 5 五郎さん 経理部 <br> ===== 解説 ===== "WHERE 社員番号 = CASE WHEN @検索社員番号 IS NULL THEN 社員番号 ELSE @検索社員番号 END"において、<br> CASE WHEN文を使用することで、条件が指定されてない(@検索社員番号がNULL)場合は、テーブルの値をそのまま使用し、<br> 条件が指定された(@検索社員番号がNULL以外)の場合は、その指定された値で検索する。<br> <br> SQL文を記述する量を少なくすることができる。<br> <br><br> __FORCETOC__ [[カテゴリ:SQL_Server]]
SQL Server - 条件分岐
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse