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”。
谢谢。
在视图上创建一个触发器,而不是触发器
样本表/视图
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)
| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |