小编典典

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

sql

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

谢谢保罗


阅读 1058

收藏
2021-04-22

共1个答案

小编典典

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

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

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

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

2021-04-22