2013-04-24 20 views
3

我有許多不同的視圖,它們使用相同的基礎表,但每個視圖都使用FK的不同默認值。如何將默認值作爲SQL Server視圖定義的一部分插入?

所以我嘗試代碼:

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 

我需要「3」每一個我記錄插入vwTest時間插入tblTest.GroupId。

謝謝。

+0

你可以看看[代替插入觸發器(http://msdn.microsoft .com/en-gb/library/ms175089(v = sql.105).aspx) – 2013-04-24 21:47:15

+0

謝謝。看過這些後,我對「Alter View」腳本應該是什麼樣子有些困惑。真的很欣賞使用上述的例子。謝謝。 – SamJolly 2013-04-24 22:06:49

回答

4

的視圖創建,而不是觸發

SQL fiddle

樣本表/圖

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; 
+0

非常感謝您提供非常全面的答覆。非常感謝。 – SamJolly 2013-04-24 22:48:10

+0

也像SQL小提琴一樣。每天學點東西! – SamJolly 2013-04-24 22:48:42

1

我相信唯一的方法是在每個視圖上定義一個替代觸發器。

+0

塞巴斯蒂安,謝謝你。看到我上面的評論。 – SamJolly 2013-04-24 22:08:01