Fang von null Warnungen Aggregatfunktionen in sql
Wie macht man den debugger verwenden, die in sql 2008 /2012 fangen von null-Werten in Datensätzen?
Finden Sie unter:
drop table abc
create table abc(
a int
)
go
insert into abc values(1)
insert into abc values(null)
insert into abc values(2)
select max(a) from abc
(1 row(s) affected)
Warning: Null value is eliminated by an aggregate or other SET operation.
Kann dies rectifed by doing:
SELECT max(isNull(a,0)) FROM abc
was in Ordnung ist, bis ich komme bis zu 200 Zeile Abfragen mit mehreren Ebenen verschachteln,und ein ResultSet von 2000 sonderbare Aufzeichnungen. - Und dann haben keine Ahnung, welche Spalte wirft die Warnung.
Wie füge ich bedingte breakpoints ( oder brechen Sie auf Warnung ) in der SQL-debugger? ( wenn es überhaupt möglich ist )
- Warum müssen Sie fangen die Warnungen? SQL wird einfach ignorieren null-Werte, die in der Regel das richtige zu tun. In deinem Beispiel, wenn Ihre Tabelle enthält
{ -1, null, -2}
,max(a)
zurück-1
, in der Erwägung, dassmax(isnull(a, 0))
zurück0
. - Ich würde gerne wissen, wo / warum die Warnung wird ausgelöst, um zu überprüfen meine Logik
Du musst angemeldet sein, um einen Kommentar abzugeben.
Teil 1: Über Aggregat Warnungen...
In Anbetracht Ihrer mehreren Ebenen verschachteln, ich fürchte, es ist keine einfache Möglichkeit, zu sehen, welche Datensätze die trigger-Warnungen.
Ich denke, deine beste Chance sein würde, zu entfernen, die jedem Aggregat-Funktion, die man in einer Zeit, die von der SELECT-Teil der top-level-Anweisung und Abfrage ausführen, so dass Sie sehen können, welche Summe ist verursacht Warnung auf der obersten Ebene (wenn vorhanden)
Nach, dass Sie gehen soll, um verschachtelte Abfragen und verschieben jedes sub-Abfrage, die feeds der top-level-Aggregate zu einem separaten Fenster, und führen Sie es, überprüfen Sie Warnungen. Sie sollten wiederholen Sie diesen Vorgang für zusätzliche Ebenen verschachteln, um herauszufinden, was tatsächlich bewirkt, dass die Warnungen.
Können Sie verwenden die folgende Methode auch.
Teil 2:Über bedingte Haltepunkte...
Für den Willen des debugging, Sie verschieben Sie Sie geschachtelte Tabellen aus und setzen Sie Ihre Daten in eine temp-Tabelle. Nach, dass Sie die überprüfung auf null-Werte in das temp-Tabelle. Legen Sie einen Haltepunkt in einer IF-Anweisung. Ich glaube, das ist das beste, was in der Nähe zu einem bedingten Haltepunkt. (WENN Ziffer kann geändert werden, um zu bauen andere Bedingungen)
Hier ist ein solides Beispiel
Stattdessen:
hierzu:
Aggregatfunktionen auszuschließen, werden null-Werte per definition, so kann man nur schreiben
statt
werden, wenn alle Werte von a in abc null sind, in denen die zweite Abfrage würde return null anstelle von null.
Wenn Sie verhindern möchten, dass null-Werte eingegeben werden, verwenden Sie eine not null-constraint auf der Spalte.
Können Sie deaktivieren die Warnung durch ausführen von:
Dies erklärt hier. Dies funktioniert, zumindest auf den Systemen getestet hab ich es auf, entfernen Sie die Warnung bei der Aggregation auf NULL-Werte.
Dieser angeblich hat eine andere Wirkung auf die Umwandlung von numerischen overflows und dividieren durch 0 zu Null-Werte eher als ein Fehler. Aber ich bekomme immer noch die Fehler für die Division durch 0 und arithmetische überläufe.
Als beiseite, wenn Sie mithilfe von SQL Server Management Studio, man sieht selten diese Meldung. Wenn die Abfrage erfolgreich ist, wird die Nachricht auf die Registerkarte "Nachrichten". Allerdings SSMS wird standardmäßig auf der Registerkarte "Ergebnisse" und in der Regel gibt es keinen Grund zu schauen, die Nachrichten (obwohl die Warnung da ist). Sie sehen nur die Warnung automatisch, wenn es ist ein Fehler in der Abfrage, und SSMS wird standardmäßig auf der Registerkarte "Nachrichten".
Müssen Sie schreiben eine zweite Abfrage, um zu ziehen aus den Daten, die Sie suchen.
Können Sie setzen, dass in einer IF-Anweisung zu schreiben eine Fehlermeldung, oder ein log in eine Tabelle. Andere als die, sind Sie aus Glück heraus. Sorry. : /
Eher können Sie Sie ignorieren, dass die Zeilen mit null-Werten