如何在 SQL Server 视图定义中插入默认值?

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插入记录时,需要将“3”插入到tblTest.GroupId中。
谢谢。

你可以查看代替插入触发器 - Ian Kenney
谢谢您。我看了一下,对于“Alter View”脚本应该是什么样子有点困惑。如果能提供一个使用上述内容的示例,将不胜感激。谢谢。 - SamJolly
2个回答

6

在视图上创建一个代替触发器

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;

非常感谢您提供这么详尽的回复,真的非常感激。 - SamJolly
也喜欢 SQL fiddle 工具。每天学点东西!! - SamJolly

1
我认为唯一的方法是在每个视图上定义一个代替触发器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接