Laden...

Eigenen SQL Type an Tabelle joinen und nutzen, wenn nicht NULL

Erstellt von roYaL-TS vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.187 Views
R
roYaL-TS Themenstarter:in
53 Beiträge seit 2012
vor 6 Jahren
Eigenen SQL Type an Tabelle joinen und nutzen, wenn nicht NULL

verwendetes Datenbanksystem: SQL-Server 2012

Hallo zusammen,

ich reiche über das EF6 DataTables an eine SQL Function durch. Diese werden auf dem SQL-Server als Type (eine Column, uniqueidentifier) entgegengenommen.

In meiner Query möchte ich diese nun JOINEN um entsprechend zu filtern, wenn Daten übertragen werden. Der Filter soll nicht zwingend sein, sodass die Tabelle entsprechend auch keine Werte enthalten kann.

Bisher hatte aber kein genutzt JOIN erfolg. Wenn die Tabelle Daten enthält wird korrekt gefiltert, wenn sie leer ist bekomme ich hingegen keinen Wert zurück.

Ich habe es auch über ein CASE im WHERE probiert, dies hat leider auch nicht zum gewünschten Ergebnis geführt. Hat da evtl. jemand eine Idee wie das umzusetzen wäre?

Viele Grüße
roYaL-TS

“Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live”
 John Woods

D
985 Beiträge seit 2014
vor 6 Jahren

Wenn die DataTable leer ist, dann einfach nicht mit der joinen

R
roYaL-TS Themenstarter:in
53 Beiträge seit 2012
vor 6 Jahren

Danke für die schnelle Antwort, das wäre natürlich die einfachste Variante, das sollte aber dynamisch vom SQL-Server geprüft werden.

Ich übergebe aus dem C#-Code immer die DataTable nach hinten durch, diese kann 0-n Werte enthalten. Mir ist aber nicht bekannt, dass ich um einen JOIN ein CASE packen kann, daher müsste ich ja einen anderen Vergleichsparameter irgendwo benutzen. Nur ist mir dieser nicht bekannt.

Viele Grüße
roYaL-TS

“Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live”
 John Woods

R
roYaL-TS Themenstarter:in
53 Beiträge seit 2012
vor 6 Jahren

Für eine Übergabetabelle konnte ich das Problem lösen, ich werde morgen noch prüfen ob dies auch für weitere Übergabetabellen (in meinem Fall sind es 25) funktioniert.

Die Lösung ist:


...
WHERE EXISTS (SELECT [Id] FROM @datatable1 WHERE [Id] = T.[Id])
 OR NOT EXISTS(SELECT [Id] FROM @datatable1)	
...

“Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live”
 John Woods