我一直在尝试了解以下视图的问题所在,但不幸的是,除了使用触发器之外,我无法在任何地方找到我的答案,而我希望避免使用触发器。给定以下视图,当我尝试将其插入时,会出现上述错误,但是,如果我删除了对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语句组合为一个。 每个SELECT语句都引用一个SQL Server基表。
from子句中有两个表,因此它是不可更新的。这是一个只读视图。我不知道这在2012年有所改变。
from