Diciamo che ho la seguente tabella:Come determinare se una colonna di una vista è derivata o costante?
create table t_Item (
ItemID int not null identity(1,1) constraint PK_Item primary key,
Description varchar(256) not null,
Price decimal(10,2) not null
)
e alla seguente vista:
create view Item as
select ItemID
,Description
,Price
,1.09 Tax
,Price * 1.09 TaxedPrice
from t_Item
TaxedPrice
è una colonna derivata, e Tax
è una colonna costante.
Pertanto, non posso inserire o aggiornare nessuno di essi. La prima query seguente passerebbe, mentre gli altri fallirebbero con un errore.
insert into Item (Description, Price) values ('Test item', 14.00)
insert into Item (Description, Price, TaxedPrice) values ('Test item', 14.00, 15.26)
insert into Item (Description, Price, Tax) values ('Test item', 14.00, 1.09)
E qui è il messaggio di errore restituito:
Update o inserto di vista o funzione 'Voce' fallito perché contiene un campo derivato o costante.
C'è un modo, forse con le viste di sistema, di elencare le colonne della vista che non devono essere aggiornate?
Non so. Mi sarei aspettato 'is_computed' in' sys.columns' per mostrare questo, ma non sembra per le viste e non vedo nulla in ['COLUMNPROPERTY'] (http://msdn.microsoft.com/it/ us/library/ms174968.aspx) entrambi. –
'is_computed' è stata la mia prima ipotesi, ma [la definizione di Microsoft] (http://msdn.microsoft.com/en-us/library/ms191250 (v = SQL.105) .aspx) è: ' Una colonna calcolata è calcolato da un'espressione che può utilizzare altre colonne nella stessa tabella. Qui non è il caso, in quanto la colonna della vista utilizza una colonna dalla tabella sottostante, non dalla vista stessa. – madprog