Ich habe ein Szenario, in dem ich Daten zwischen zwei Systemen aggregiere. Leider verwende ich einen Tabellenadapter in Visual Studio.Wenn ich eine Umwandlung in eine WHERE-Klausel habe, bevor ich ein anderes Feld überprüfe, wird es dann fehlschlagen?
Select * from prsnpsht where Cast(snp_check as bigint) > 10 and sourcereference Is Null
Union ALL
Select * from prsnpsht where sourcereference is not null
Im obigen Fall wird die snp_check von dem ersten System all numerisch sein, die mit der snp_check richtig bigint gegossen werden, und wir wissen, dass die Daten aus dem ersten System sind, weil die sourcereference null ist. Das zweite System kann andere Zeichen im Feld "snp_check" enthalten. Wenn es versucht hat, in bigint zu konvertieren, schlägt es fehl.
Wenn ich die Struktur der Abfrage so behalte, wie sie ist, wird sie versuchen, alle Prüfungen auf big int zu setzen, bevor sie die Quellenreferenzbedingung analysiert, oder SQL Server ist intelligent genug, um zu wissen, dass er die Daten begrenzen sollte bevor es versucht, das snp_check Feld zu werfen?
Ich entschuldige mich im Voraus, wenn dies eine doppelte Frage ist, aber ich konnte es nicht finden, wenn es zuvor beantwortet wurde.
Ich sehe nicht "zwei Systeme" in Ihrer Abfrage verwiesen. –
@GordonLinoff Ich vermute, dass die Frage über Logik Kurzschluss ist, obwohl die Abfrage neu geschrieben werden könnte, um diese Bedenken zu vermeiden. – DavidG
Wir haben zwei Systeme, die in dieselbe Tabelle schreiben. Das Feld snp_check ist ein nvarchar (25), das beides erlaubt. Die Abfrage bezieht sich auf einen Bericht. –