2017-06-09 7 views
0

テーブルから追加の「計算済み」フィールドを含むSELECT *クエリを作成しました。SQL ServerのビューでINSERT INTOを実行するとカスタムフィールドが無視される

このビューを使用してデータを選択し、このビューを使用してデータを挿入できるアプリケーションがあります。 ビューの代わりにテーブルを使用してINSERTを行うようにアプリケーションに指示することはできませんが、SQL ServerはビューのINSERTを処理できます。

ただし、この場合、アプリケーションは挿入を行うときに、ビューのすべてのフィールドを自動的に追加してINSERTに追加します。 したがって、計算されたフィールドのINSERTのために挿入クエリが失敗します。

「リスナー」のようなものをINSERTのビューに追加して、INSERTクエリの一部のフィールドを無視または削除することはできますか?

おかげ

+2

理由だけではなく、アプリケーションのINSERTで必要な列を指定していませんか?アプリケーションのコードは何ですか?私はあなたが尋ねているものは、ビューで可能であるとは思わない、それはsprocである必要があります。 –

+0

ビューの作成にselect *を使用しないでください。基になるテーブル定義が変更されたらどうなりますか?そして誰があなたがビューに挿入できないと言っているのですか? – scsimon

+0

'SELECT *'は単純な説明のためのものです。私はアプリケーションコードにアクセスすることはできません。 – Seb33300

答えて

0

あなたはINSTEAD OF INSERTTRIGGERを実装することができます。ような何か:

CREATE VEW VW_YOUR_VIEW AS 
    SELECT * FROM sys.objects 
GO 

CREATE TRIGGER TRG_INSERT_YOUR_VIEW ON VW_YOUR_VIEW 
INSTEAD OF INSERT 
BEGIN 
    --Your Real Insert 
    SELECT * FROM INSERTED 
END 

出典:https://technet.microsoft.com/en-us/library/ms175089(v=sql.105).aspx

+0

Indead、完全な例で 'INSERT'のドキュメントを発見しました:https://technet.microsoft.com/en-us/library/ms175089(v=sql.105).aspx – Seb33300

+0

@ Seb33300はリンクを追加しましたソースとして – hardkoded

関連する問題