SQLServerのVIEWに対するデータの挿入・更新

SQLServerでは複数のテーブルを結合した状態を1つのテーブルのように扱えるVIEWという機能があります。

VIEWを利用すると複雑なSELECT文を何度も書く必要がなくなり、メンテナンス性の向上に役立ちます。

また、VIEWは挿入または更新データが影響する結合元のテーブルが1の場合のみ、VIEWに対してINSERTやUPDATEを行うことができます。

スポンサーリンク

SQLServerのVIEWに対するデータの挿入・更新

SQLServerのVIEWは複数のテーブルを結合した状態を1つのテーブルのように扱えるようにした仮想的なテーブルです。

このVIEWに対してデータの挿入や更新は、挿入、更新が与える影響されるテーブルが1つの場合のみ許されます。

VIEWの作り方

まずはVIEWの作り方ですが

CREATE VIEW view名 AS SELECT文

で作成します。

実際の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]
となります。

これに準備としてデータを挿入しておきます。

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が行えます。

  1. VIEWは複数のテーブルを結合して実行したSELECT文を登録し、テーブルのようにあつかえる機能
  2. VIEWに対するINSERTやUPDATEは影響するテーブルが1テーブルの時のみ可能

以上、SQLServerのVIEWに対するデータの挿入・更新でした。

タイトルとURLをコピーしました