Wir in einigem Legacy-SQL Server 2005-Code wieWas Auswahlabfrage SQL Server 2005 erwartetes Verhalten des Einsatzes in der Tabelle ist, wo eine der Spalten versucht einen Nullwert
insert into myTable
select distinct
wherefield1,
wherefield2,
anotherfield,
convert(numeric(10,2), varcharfield1),
convert(numeric(10,2), varcharfield2),
convert(numeric(10,2), varcharfield3),
convert(datetime, varcharfield4),
otherfields
from myStagingTable
where insertflag='true'
and wherefield1 = @wherevalue1
and wherefield2 = @wherevalue2
Früher in dem Code eine Erklärung zu konvertieren Eine Variable wird gesetzt, um zu bestimmen, ob varcharfield1 oder varcharfield2 null ist, und die Einfügung ist so programmiert, dass sie ausgeführt wird, solange eine von ihnen nicht null ist.
Wir wissen, dass, wenn varcharfield1, varcharfield2 oder varcharfield3 eine nicht numerische Zeichenfolge ist, eine Ausnahme ausgelöst wird und die Einfügung nicht erfolgt. Aber ich bin perplex über das Verhalten, wenn eine dieser Variablen null ist, wie es oft ist. Tatsächlich ist es immer der Fall, dass einer dieser Werte null ist. Aber es scheint, dass die Einfügung stattfindet. Es sieht so aus, als ob der Legacy-Code darauf angewiesen ist, nur das Einfügen nicht numerischer Zeichendaten zu verhindern, während das Einfügen von Null- oder Leerwerten zulässig ist (in einem früheren Schritt wurden alle leeren Strings in diesen Feldern von myStagingTable durch Nullwerte ersetzt).
Dies wurde auf einer Produktion SQL Server 2005-Instanz mit allen Standardeinstellungen für eine Anzahl von Jahren ausgeführt. Können wir uns auf dieses Verhalten verlassen, wenn wir auf eine neuere Version von SQL Server aktualisieren?
Danke,
Rebeccah
Sie haben natürlich Recht. Die versuchte Konvertierung von Nullen wurde von einem Kollegen als Ursache für eine Reihe von Fehlerprotokolleinträgen vorgeschlagen, die jedoch durch die versuchte Konvertierung nicht numerischer Zeichenfolgen verursacht wurden. Erst später wurde mir klar, dass der Autor des Codes leere Werte speziell in Nullen umgewandelt hatte, um Fehler zu vermeiden, und ließ den Umwandlungsfehler für nicht numerische Zeichenfolgen unberücksichtigt, um das Einfügen und die Überprüfung der Daten durch menschliche Augäpfel zu erzwingen. – Rebeccah