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
imsys.columns
zu zeigen, diese aber scheinbar nicht für die Ansichten und ich sehe nichts in derCOLUMNPROPERTY
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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht aus wie es ist kein system-Ansicht speichert die Informationen, die Sie suchen. Finden Sie heraus abgeleitete Spalte oder Konstante Spalte durch analysieren der Sichtdefinition oder durch exception-handling...nicht gut, aber nicht andere Wege finden...
union
zwischen zweiselect
s markieren Sie alle Spalten abgeleitet, aber Sie werden gefunden in der Mitte der Abfrage.Ich glaube nicht, dass diese decken alle Szenarien, sondern ein Anfangspunkt zum schreiben der parser.