Fügen Sie einen leeren String in die INT-Spalte für SQL Server ein

9

Eine SAMPLE Tabelle hat nur eine Spalte ID vom Typ int , default null.

In Oracle, wenn ich das tue:

%Vor%

Der neue Datensatz wird mit einem leeren Wert hinzugefügt. Aber in SQL Server 2008, wenn ich dieselbe insert -Anweisung ausführen, hat der neue Datensatz den Wert 0.

Gibt es eine Möglichkeit, SQL Server 2008 zu zwingen, eine leere Zeichenfolge auf NULL anstelle von 0 (für den numerischen Spaltentyp) zu setzen?

    
user1793297 02.11.2012, 05:15
quelle

5 Antworten

6

Verwenden Sie stattdessen NULL.

%Vor%     
Mikael Eriksson 02.11.2012 05:18
quelle
4
___ answer13189721 ___

Verwenden Sie stattdessen NULL.

%Vor%     
___ qstnhdr ___ Fügen Sie einen leeren String in die INT-Spalte für SQL Server ein ___ qstntxt ___

Eine %code% Tabelle hat nur eine Spalte %code% vom Typ %code% , default null.

In Oracle, wenn ich das tue:

%Vor%

Der neue Datensatz wird mit einem leeren Wert hinzugefügt. Aber in SQL Server 2008, wenn ich dieselbe %code% -Anweisung ausführen, hat der neue Datensatz den Wert 0.

Gibt es eine Möglichkeit, SQL Server 2008 zu zwingen, eine leere Zeichenfolge auf NULL anstelle von 0 (für den numerischen Spaltentyp) zu setzen?

    
___ antwort13193945 ___

Angenommen, Ihre INSERT-Anweisung ist Teil einer gespeicherten Prozedur, die an vielen Stellen Ihrer Anwendung wiederverwendet wird (oder vielleicht ist ein Stapel immer aus demselben Teil des Client-Codes aufgebaut) und der eingefügte Wert eine Zahl ist übergeben als String-Argument, könnten Sie die INSERT wie folgt ändern:

%Vor%     
___ answer13189724 ___

Sie können keine 'Zeichenfolge' in eine int-Spalte einfügen. Oracle muss das nur für dich erledigen.

Versuchen Sie einfach, NULL einzufügen, wenn Sie das brauchen.

%Vor%     
___ tag123sql ___ Structured Query Language (SQL) ist eine Sprache für die Abfrage von Datenbanken. Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) enthalten. Wenn sich Ihre Frage nur auf ein bestimmtes DBMS bezieht (verwendet bestimmte Erweiterungen / Funktionen), verwenden Sie stattdessen das Tag des DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten den ISO / IEC-Standard SQL verwenden. ___ answer13191763 ___

Wie wäre es mit einer anderen Idee - definieren Sie INSTEAD OF INSERT Trigger .

Trotz der Tatsache, dass Sie versuchen, eine Zeichenfolge einzufügen, wird die Operation "abgefangen", die leere Zeichenfolge wird durch NULL ersetzt und die Einfügung ist erfolgreich.

Wenn Sie diesen Trigger für Ihre Tabelle definieren, können Sie wie bisher ohne weitere Änderungen eine leere Zeichenfolge einfügen.

Bearbeiten: Wie Martin Smith betont, ist dies effektiv ein Vergleich mit 0 (das Äquivalent einer leeren Zeichenkette als int), was bedeutet, dass Sie 0 in dieser Tabelle nicht speichern können. Ich überlasse diese Antwort hier, falls das für Ihre Situation akzeptabel ist - entweder oder wiederholen Sie alle Ihre Fragen!

%Vor%

SQL Fiddle Beispiel

    
___ tag123sqlserver2008 ___ Verwenden Sie dieses Tag für Fragen, die für die 2008-Version von Microsoft SQL Server spezifisch sind. ___ tag123numeric ___ Dieses Tag ist für Fragen zu Problemen mit Zahlen gedacht, die entweder nicht genau gelöst werden können oder bei denen die genaue Lösung schwieriger zu ermitteln ist als mit numerischen Methoden. ___ answer13191552 ___

Eine weitere Option

%Vor%     
___ tag123insert ___ Insert ist eine Aktion zum Hinzufügen von Informationen zu einem größeren Container, in dem die Informationen gespeichert werden sollen. Einige Beispiele umfassen das Einfügen einer Datei in ein Dateisystem, das Einfügen eines Datensatzes in eine Datenbank oder das Einfügen eines Elements in eine Liste. ___
Andriy M 02.11.2012 11:03
quelle
3

Wie wäre es mit einer anderen Idee - definieren Sie INSTEAD OF INSERT Trigger .

Trotz der Tatsache, dass Sie versuchen, eine Zeichenfolge einzufügen, wird die Operation "abgefangen", die leere Zeichenfolge wird durch NULL ersetzt und die Einfügung ist erfolgreich.

Wenn Sie diesen Trigger für Ihre Tabelle definieren, können Sie wie bisher ohne weitere Änderungen eine leere Zeichenfolge einfügen.

Bearbeiten: Wie Martin Smith betont, ist dies effektiv ein Vergleich mit 0 (das Äquivalent einer leeren Zeichenkette als int), was bedeutet, dass Sie 0 in dieser Tabelle nicht speichern können. Ich überlasse diese Antwort hier, falls das für Ihre Situation akzeptabel ist - entweder oder wiederholen Sie alle Ihre Fragen!

%Vor%

SQL Fiddle Beispiel

    
Bridge 02.11.2012 08:31
quelle
0

Sie können keine 'Zeichenfolge' in eine int-Spalte einfügen. Oracle muss das nur für dich erledigen.

Versuchen Sie einfach, NULL einzufügen, wenn Sie das brauchen.

%Vor%     
Jarod Elliott 02.11.2012 05:18
quelle
0

Eine weitere Option

%Vor%     
Aleksandr Fedorenko 02.11.2012 08:15
quelle