Wie zu bestimmen, ob eine Spalte einer Sicht abgeleitet oder konstant?

Sagen wir, ich habe die folgende Tabelle:

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
)

und die folgende Ansicht:

create view Item as
  select ItemID
        ,Description
        ,Price
        ,1.09 Tax
        ,Price * 1.09 TaxedPrice
    from t_Item

TaxedPrice ist eine abgeleitete Spalte, und Tax ist eine ständige Spalte.

Daher kann ich nicht einfügen oder aktualisieren Sie alle von Ihnen. Die erste folgende Abfrage würde passieren, während die anderen würden zu einem Fehler.

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)

Und hier ist die Fehlermeldung:

Aktualisieren oder einfügen der Sicht oder Funktion 'Element' ist fehlgeschlagen, weil es enthält ein abgeleitetes oder konstantes Feld.

Gibt es eine Möglichkeit, vielleicht mit den system-Blick, auf der Liste die Spalten der Sicht, die muss nicht aktualisiert werden?

  • Weiß nicht. Ich hätte erwartet is_computed im sys.columns zu zeigen, diese aber scheinbar nicht für die Ansichten und ich sehe nichts in der COLUMNPROPERTY entweder.
  • is_computed war meine erste Vermutung auch, aber Microsoft-definition ist: A computed column is computed from an expression that can use other columns in the same table. Hier ist es nicht der Fall, wie die Spalte, der die Ansicht verwendet eine Spalte aus der zugrunde liegenden Tabelle, nicht aus der Sicht selbst.
InformationsquelleAutor madprog | 2013-03-06
Schreibe einen Kommentar