2009-06-10 6 views
0

Ich habe eine Abfrage mit einer Unterabfrage in der Auswahl, die einen Wert aus einer bestimmten Tabelle abrufen muss, wenn sie existiert. Ich möchte nicht die Abfrage hier aus geschäftlichen Gründen einzufügen, aber hier ist ein vereinfachtes Beispiel dafür, was ich zu tun versucht:Wie Oracle Query für ASP.NET-Tabellenadapter erkennbar gemacht werden?

select a, b, (select x from z) as c from table where ... 

Die Abfrage läuft in TOAD in Ordnung, aber wenn ich durch die ASP.NET Tabellenadapter-Assistent in meinem Datenobjekt, beschwert sich über die SQL-Anweisung: "Fehler in SELECT-Klausel NEAR ','". Ich bin mir nicht sicher, ob es zur Laufzeit noch funktioniert, obwohl es sich beschwert? Ich weiß, dass die Vorschau nicht funktioniert und die Datentabelle nicht erstellt wurde. Jeder hat das erlebt?

Der Grund, warum ich es so machen möchte, ist, weil die Abfrage, die Feld c auffüllt, nicht immer einen Wert hat, aber ich muss a und b zurückgeben, auch wenn c keinen Wert hat. Irgendein gutes mit Wissen von SQL kann in der Lage sein, eine Arbeit herum vorzuschlagen. Ich möchte wenn möglich mit 1 Tabellenadapterabfrage bleiben.

Antwort

2

Äußere Verbindung mit Tabelle Z?

SELECT t.a,t.b,z.x 
    FROM table t LEFT OUTER JOIN Z ON (t.y = Z.y) 
WHERE... 

Dies gibt Ihnen die Werte von Z, wenn sie existieren, sonst NULL.

2

Wenn ein Tool eine Abfrage nicht versteht, besteht eine Methode, die immer funktioniert, darin, eine Ansicht zu erstellen, die die Abfrage kapselt.

CREATE VIEW v AS SELECT a, b, (select x from z) as c from table 

Sie würden dann eine einfache Abfrage in ASP.NET wie verwenden:

SELECT a, b, c FROM v where... 

Der Blick jetzt Ihre Geschäftslogik enthält und würde in Ihrem Quellcodeverwaltungsrepository neben allen anderen Code gehalten werden.

+0

+1, guter Vorschlag, solange Benutzer die Möglichkeit haben, Objekte in der Datenbank zu erstellen. – DCookie

+0

Leider würde dies eine DBA-Genehmigung und Regressionstests erfordern. – Jon

Verwandte Themen