SQLServerでは複数のテーブルを結合した状態を1つのテーブルのように扱えるVIEWという機能があります。
VIEWを利用すると複雑なSELECT文を何度も書く必要がなくなり、メンテナンス性の向上に役立ちます。
また、VIEWは挿入または更新データが影響する結合元のテーブルが1の場合のみ、VIEWに対してINSERTやUPDATEを行うことができます。
SQLServerのVIEWに対するデータの挿入・更新
SQLServerのVIEWは複数のテーブルを結合した状態を1つのテーブルのように扱えるようにした仮想的なテーブルです。
このVIEWに対してデータの挿入や更新は、挿入、更新が与える影響されるテーブルが1つの場合のみ許されます。
VIEWの作り方
まずはVIEWの作り方ですが
で作成します。
実際のSQLでは
--VIEWの元テーブル1個め CREATE TABLE table_a ( no INT ,name VARCHAR(20) ) --VIEWの元テーブル2個め CREATE TABLE table_b ( no INT ,age INT ) GO --VIEWの作成 CREATE VIEW table_all AS SELECT tbl_a.no AS a_no ,tbl_b.no AS b_no ,tbl_a.name AS name ,tbl_b.age AS age FROM table_a AS tbl_a ,table_b AS tbl_b WHERE tbl_a.no = tbl_b.no Go [/SQL] となります。 これに準備としてデータを挿入しておきます。 [sql] INSERT INTO table_a VALUES ( 1, '太郎' ),( 2, '花子' ),( 3, '次郎' ) INSERT INTO table_b VALUES ( 1, 20 ),( 2, 18 ),( 3, 15 )
VIEWに対するSELECT(データの選択)
VIEWは通常のテーブルと同じようにあつかえるので、普通にSELECT文を書きます。
SELECT a_no AS a_no ,b_no AS b_no ,name AS name ,age AS age FROM table_all
実行結果は
a_no b_no name age 1 1 太郎 20 2 2 花子 18 3 3 次郎 15
VIEWを使うと余計なテーブル結合(table join)などを書かずに済むのでSQLがスッキリします。
VIEWに対するデータのINSERT(挿入)、UPDATE(更新)
VIEWに対するデータのINSERT(挿入)、UPDATE(更新)はそのデータが与える影響が1つのテーブルに限定される場合のみ、許されます。
UPDATE table_all SET name = '名前変えました' WHERE a_no = 1
は影響するテーブルが「table_a」のみなので、これを実行しSELECTすると
a_no b_no name age 1 1 名前変えました 20 2 2 花子 18 3 3 次郎 15
となり正常に更新できています。
ただ
UPDATE table_all SET name = '名前変えました', age= 30 WHERE a_no = 1
のように「table_a」と「table_b」に影響するようなUPDATE文を実行すると
メッセージ 4405、レベル 16、状態 1、行 60 変更が複数のベース テーブルに影響するので、ビューまたは関数 'table_all' は更新可能ではありません。
とエラーになってしまいます。
まとめ
SQLServerでは複数のテーブルを結合した状態を1つのテーブルのように扱えるVIEWという機能があり、VIEWを使うと複雑なSELECT文を一度書くだけでそのSELECT結果自体をテーブルのように扱えます。
INSERTやUPDATEもそのデータが影響を与えるテーブルが1つの場合は通常のテーブルと同じようにINSERTやUPDATEが行えます。
- VIEWは複数のテーブルを結合して実行したSELECT文を登録し、テーブルのようにあつかえる機能
- VIEWに対するINSERTやUPDATEは影響するテーブルが1テーブルの時のみ可能
以上、SQLServerのVIEWに対するデータの挿入・更新でした。