我有许多不同的 View ,它们使用相同的基础表,但每个 View 都使用不同的 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 中。
谢谢。
最佳答案
在 View 上创建替代触发器
示例表/ View
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;
将一些测试数据放入表/ View
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;
关于sql-server - 如何插入默认值作为 SQL Server View 定义的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16202752/