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

时间:2014-08-24 13:49:08

标签: 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

这是我的插入,我只插入[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,感谢任何帮助。

谢谢, 保罗

2 个答案:

答案 0 :(得分:11)

评论时间有点长。

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

  

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

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

答案 1 :(得分:4)

您可以通过向视图添加"instead of" trigger并更改基础表来解决此问题。