我一直试图了解以下视图的错误,遗憾的是我无法在任何地方找到我的答案,除了使用触发器,我想避免。鉴于以下视图,当我尝试插入其中时,我得到上面的错误,但是如果我将内部联接删除到Company表,一切似乎都可以正常工作:
CREATE VIEW [dbo].[vwCheckBookingToCheck]
WITH SCHEMABINDING
AS
SELECT [checkUser].[CheckID] ,
[checkUser].[CheckToTypeID] ,
[checkUser].[CheckNumber] ,
[checkUser].[CheckDate] ,
[checkUser].[CheckAmount] ,
[checkUser].[CheckStatusID] ,
[checkUser].[CheckAcceptedBy] ,
[checkUser].[CreatedBy] ,
[checkUser].[CreatedDateTime] ,
[checkUser].[CheckToUserID] [ToID],
[checkUser].[CheckFromCompanyID] [FromID],
[companyFrom].[CompanyName]
FROM [dbo].[CheckUser] [checkUser]
INNER JOIN [dbo].[Company] [companyFrom] ON [companyFrom].[CompanyID] = [checkUser].[CheckFromCompanyID]
UNION ALL
SELECT [checkCompany].[CheckID] ,
[checkCompany].[CheckToTypeID] ,
[checkCompany].[CheckNumber] ,
[checkCompany].[CheckDate] ,
[checkCompany].[CheckAmount] ,
[checkCompany].[CheckStatusID] ,
[checkCompany].[CheckAcceptedBy] ,
[checkCompany].[CreatedBy] ,
[checkCompany].[CreatedDateTime] ,
[checkCompany].[CheckToCompanyID] [ToID],
[checkCompany].[CheckFromCompanyID] [FromID] ,
[companyFrom].[CompanyName]
FROM [dbo].[CheckCompany] [checkCompany]
INNER JOIN [dbo].[Company] [companyFrom] ON [companyFrom].[CompanyID] = [checkCompany].[CheckFromCompanyID]
GO
这是我的插入,我只插入[CheckUser]或[CheckCompany]:
INSERT INTO [dbo].[vwCheckBookingToCheck]
( [CheckToTypeID] ,
[CheckNumber] ,
[CheckDate] ,
[CheckAmount] ,
[CheckStatusID] ,
[CheckAcceptedBy] ,
[CreatedBy] ,
[CreatedDateTime] ,
[ToID] ,
[FromID]
)
SELECT 2,
'Test' , -- CheckNumber - varchar(255)
'2014-08-23 20:07:42' , -- CheckDate - date
1233 , -- CheckAmount - money
0 , -- CheckStatusID - int
1 , -- CheckAcceptedBy - int
1 , -- CreatedBy - int
'2014-08-23 20:07:42' , -- CreatedDateTime - datetime
1, -- ToID - int
1 -- FromID - int
CheckToTypeID是我的检查约束,是否有任何方法可以使此视图与内部联接一起使用?同样,如果我删除了内连接,我可以让它工作,但我想尽可能保留它们。
我正在使用SQL Server 2012,感谢任何帮助。
谢谢, 保罗
答案 0 :(得分:11)
评论时间有点长。
我无法轻易找到有关此主题的2012年文档,但SQL Server 2008 documentation非常明确:
当视图为a时,视图被视为可更新的分区视图 组合各个结果集的SELECT语句集 一个使用UNION ALL语句。 每个SELECT语句 引用一个SQL Server基表。
from
子句中有两个表,因此它不可更新。这是一个只读视图。我不知道这在2012年有所改变。
答案 1 :(得分:4)
您可以通过向视图添加"instead of" trigger并更改基础表来解决此问题。