5

同じ基になるテーブルを使用するさまざまなビューがいくつかありますが、それぞれが FK に異なるデフォルト値を使用しています。

だから私の試みたコードのために:

ALTER VIEW [dbo].[vwTest]
 AS
SELECT     
Id, 
C1 AS |TestCol, 
COALESCE(GroupId,3) AS GroupId 
FROM         dbo.tblTest
WHERE     (GroupId = 3)

「3」がハードコーディングされていることは知っていますが、置き換えられます。

これは、問題を引き起こしていると私が信じている行です。

COALESCE(GroupId,3) AS GroupId 

vwTest にレコードを挿入するたびに、tblTest.GroupId に "3" を挿入する必要があります。

ありがとう。

4

2 に答える 2

6

ビューにトリガーの代わりを作成する

SQLフィドル

サンプル テーブル / ビュー

create table tblTest( id int identity, c1 varchar(10), groupid int );

create view vwtest as select c1, COALESCE(GroupId,3) GroupId 
from tblTest
where GroupID = 3;

トリガーを作成する

CREATE TRIGGER InsteadTrigger on vwTest
INSTEAD OF INSERT
AS
BEGIN
  INSERT INTO tblTest (c1, GroupID)
       SELECT c1, 3
       FROM inserted
END;

テストデータをテーブル/ビューに入れる

insert into tblTest( c1, groupid ) select 'row 1' ,3 ;
insert into tblTest( c1, groupid ) select 'row 2' ,1 ;
insert into vwTest(c1) select 'row 3';

私たちが得るものを見てください

select * from tblTest;
select * from vwTest;
于 2013-04-24T22:20:50.107 に答える
1

これを行う唯一の方法は、各ビューでの代わりのトリガーを定義することだと思います。

于 2013-04-24T21:46:52.410 に答える