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

use*_*174 14 sql sql-server-2012

我一直试图了解以下视图的错误,不幸的是我无法在任何地方找到我的答案,除了使用触发器,我想避免.鉴于以下视图,当我尝试插入它时,我得到上面的错误,但是如果我删除内部联接到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
Run Code Online (Sandbox Code Playgroud)

这是我的插入,我只插入[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
Run Code Online (Sandbox Code Playgroud)

CheckToTypeID是我的检查约束,是否有任何方法可以使此视图与内部联接一起使用?同样,如果我删除内连接,我能够让它工作,但我想保留它们,如果可能的话.

我正在使用SQL Server 2012,任何帮助表示赞赏.

谢谢,保罗

Gor*_*off 12

评论有点长.

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

当视图是一组SELECT语句时,视图被视为可更新的分区视图,其中各个结果集使用UNION ALL语句组合成一个.每个SELECT语句都引用一个SQL Server基表.

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


小智 7

您可以通过向视图添加“代替”触发器并改为更新基础表来解决此问题。