Bedingte Abfragen if exists

28/08/2008 - 22:32 von Dieter A Franken | Report spam
Hallo,

ich möchte ein Datenbank optimieren und dazu eine langsame Sicht die recht
statisch ist in eine Tabelle umwandeln.
Dazu benne ich einfach die Sicht Auswertung nach AuswertungOrgBezug um und
lasse dann das Script laufen.
CN.Execute "SELECT * INTO [#Auswertung] FROM AuswertungOrgBezug"
CN.Execute "Delete from Auswertung"
CN.Execute "INSERT INTO Auswertung SELECT * FROM
[#Auswertung]"
CN.Execute "Drop Table [#Auswertung]"

Ich muß aber erst alle Anwendungen darauf vorbereiten und wollte daher
abfragen ob die Sicht AuswertungOrgBezug in der Datenbank vorhanden ist.
Das geht mit
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[AuswertungOrgBezug]') and OBJECTPROPERTY(id, N'IsView') =
1)

Jetzt kombinier ich das ganze mit meinen Anweisungen
CN.Execute "if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[AuswertungOrgBezug]')
and OBJECTPROPERTY(id, N'IsView') = 1)
SELECT * INTO [#Auswertung] FROM AuswertungOrgBezug"
klappt

CN.Execute "if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[AuswertungOrgBezug]') and
OBJECTPROPERTY(id, N'IsView') = 1)
Delete from Auswertung"

und just an dieser Stelle bekomme ich ein Fehlermeldung:
Die abgeleitete Auswertung-Tabelle ist nicht aktualisierbar, da die
Definition einen UNION-Operator enthàlt.
das ist schon richtig das Auswertung noch den UNION-Operator enthàlt, aber
AuswertungOrgBezug ist nicht vorhanden und daher erwarte ich das die Zeile

Delete from Auswertung< gar nicht ausgeführt wird.



Was làuft hier falsch?

Danke schon mal für eure Hilfe
Gruss Dieter
 

Lesen sie die antworten

#1 Christoph Ingenhaag
29/08/2008 - 08:26 | Warnen spam
Hi Dieter,


Delete from Auswertung"

und just an dieser Stelle bekomme ich ein Fehlermeldung:
Die abgeleitete Auswertung-Tabelle ist nicht aktualisierbar, da die
Definition einen UNION-Operator enthàlt.

Was làuft hier falsch?



Gar nichts, alles richtig. Mit "Delete from Auswertung" würdest du die View
Auswertung aktualisieren (alle DS löschen). Und das geht nicht, weil die View
nicht aktualisierbar ist (enthàlt einen UNION Operator). Wenn du die View
löschen willst, musst du DROP VIEW verwenden.

Sind die Daten statisch?Oder wieso kannst du die View einfach in die Tonne
hauen?
Wenn du deine neue Tabelle nicht vernünftig indizierst, wirst du damit aber
auch keine Freude haben...

Vg
Christoph

Ähnliche fragen