Не удалось обновить или вставить представление или функцию, поскольку она содержит производное или постоянное поле
Я пытался понять, что не так со следующим представлением, и, к сожалению, я не смог найти свой ответ нигде, кроме использования триггеров, которых я хотел бы избежать. Учитывая следующее представление, когда я пытаюсь вставить в него, я получаю ошибку выше, однако, если я удаляю внутреннее соединение с таблицей компании, все работает нормально:
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, любая помощь приветствуется.
спасибо, Пол!--3-->
2 ответов
Это немного долго для комментария.
Я не могу легко найти документацию 2012 по этому вопросу, но документация по SQL Server 2008 вполне понятно:
представление считается обновляемым секционированным представлением, если это представление набор инструкций SELECT, отдельные результирующие наборы которых объединены в один, используя оператор UNION ALL. каждая инструкция SELECT ссылки на одну базу SQL Server таблица.
у вас есть две таблицы в from
предложение, поэтому оно не обновляется. Это вид только для чтения. Я не знаю, что это было изменено в 2012 году.
вы можете обойти это путем добавления "вместо" trigger для просмотра и обновления базовых таблиц вместо этого.