2015-05-18 2 views
3

У меня есть этот вид:Добавить постоянную обновляемый столбец для представления в SQL Server

Create View View1 
AS 
Select F1,F2,0 As F3 
From TB1 

GO 

Update View1 Set F3=1 

Эти команды поднять эту ошибку:

Update или вставку зрения или функции «view1» не удалось из-за него содержит производное или постоянное поле.

Есть ли решение для обновления поля «F3»?

Спасибо

+0

Вам нужно добавить этот столбец в таблицу. –

+0

На самом деле у меня нет разрешения на добавление столбца в таблицу. –

+0

Почему вы хотите ОБНОВИТЬ ВИД? Я думаю, вы должны изменить свой путь и сделать новый взгляд или использовать этот вид по-другому;). –

ответ

4

Единственный способ изменить значение постоянного столбца в представлении, является изменение самого представления. Не имеет смысла запускать инструкции UPDATE в постоянном или вычисленном столбце на представлении, так как это значение не сохраняется физически в любой таблице. Таким образом, вы должны сделать что-то вроде этого:

ALTER VIEW View1 A 
Select F1,F2,1 As F3 
From TB1 

Теперь вы можете быть соблазн поместить этот код в хранимую процедуру. К сожалению, это невозможно, так как DDL statements are not allowed in Stored Procedures. Другим решением является, следовательно, сохранить значение столбца F3 в отдельной таблице и изменить определение представления, чтобы довести значение в поле зрения:

CREATE TABLE F3Column (
    Value AS int 
) 

go 

INSERT F3Column VALUES (0) 

go 

CREATE VIEW View1 AS 
select F1, F2, Value AS F3 
from TB1, F3Column 

go 

-- This will allow you to change the value directly on the view: 
UPDATE View1 SET F3 = 1 

Просто убедитесь, что ваш F3Column стол всегда содержит ровно 1 запись. Если он не содержит записей, View1 всегда будет пустым. Если он содержит более 1 записи, View1 предоставит вам дубликаты.

0

Я думаю, что вы хотите результат, который показывает 1 как F3 в ваши результаты, как это:

SELECT F1, F2, 1 As F3 
FROM View1 

Или сделать новый вид, как это:

Create View View2 
AS 
Select F1, F2, 1 As F3 
From TB1  
GO 
0

F3 не столбец в любой таблицу, поэтому вы не можете обновить значение. Либо вам нужно добавить его к вашему столу или просто отображать его как новое значение в некоторых условиях с использованием CASE

CASE WHEN [condition goes here] THEN 1 END 
+0

На самом деле мне нужно создать новый физический столбец. Является ли это возможным? –

+1

Нет, такие столбцы должны жить в столе. –

+0

Как сказал @ LasseV.Karlsen, вы не можете. Но почему вы хотите обновить несуществующий столбец? Как я сказал в своем ответе, вы можете просто отобразить его как другое значение в определенных условиях – sqluser