视图或函数的更新或插入失败,因为它包含派生字段或常量字段

我一直在尝试了解以下视图的问题所在,但不幸的是,除了使用触发器之外,我无法在任何地方找到我的答案,而我希望避免使用触发器。给定以下视图,当我尝试将其插入时,会出现上述错误,但是,如果我删除了对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,不胜感激。

谢谢保罗

回答:

这有点长,可以发表评论。

我无法轻松找到关于此主题的2012文档,但是SQL Server 2008文档非常清楚:

当视图是一组SELECT语句的视图时,该视图被视为可更新的分区视图,这些语句的单个结果集使用UNION ALL语句组合为一个。

from子句中有两个表,因此它是不可更新的。这是一个只读视图。我不知道这在2012年有所改变。

以上是 视图或函数的更新或插入失败,因为它包含派生字段或常量字段 的全部内容, 来源链接: utcz.com/qa/413682.html

回到顶部