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

Sam*_*lly 4 sql-server sql-server-2008 sql-server-2008-r2

我有许多不同的视图,它们使用相同的基础表,但每个视图使用的FK的默认值都不同。

所以对于我尝试的代码:

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

我知道“ 3”是硬编码的,但是会被替换。

我认为这是引起麻烦的行:

COALESCE(GroupId,3) AS GroupId 
Run Code Online (Sandbox Code Playgroud)

每次将记录插入vwTest时,我都需要在tblTest.GroupId中插入“ 3”。

谢谢。

Ian*_*ney 5

在视图上创建一个触发器,而不是触发器

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;
Run Code Online (Sandbox Code Playgroud)

创建触发器

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

将一些测试数据放入表/视图

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';
Run Code Online (Sandbox Code Playgroud)

看看我们得到了什么

select * from tblTest;
select * from vwTest;
Run Code Online (Sandbox Code Playgroud)