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年有所改变.