2016-07-25 10 views
0

einfügen Ich habe eine Bit-Spalte in Sql-Server-Tabelle. Es speichert entweder 1, 0 oder Null.Wie könnte ich NULL für ""

Vom vorderen Ende werde ich True, False oder ""

vorbei sein, wie ich mit "" als NULL Wert einfügen könnte.

Derzeit ist es die Speicherung NULL für Falsch und ""

Meine aktuellen Code ist unten angegeben

INSERT INTO Details(Name, YesNo) 
VALUES ('John', NULLIF(@YesNoNull, '')); 
+0

Was ist Ihr Frontend? Die meisten modernen Sprachen haben eine Darstellung von 'DBNULL' ... –

+0

Was ist der erklärte Typ von' @ YesNoNull'? –

+2

Was wäre falsch daran, den tatsächlichen Wert, den Sie vom Frontend eingeben möchten, zu übergeben. '1',' 0' oder 'NULL'? –

Antwort

1

sql behandelt '' als falsch. Wenn also in Ihrer Abfrage @YesNoNull False ist, wird NULLIF (@YesNoNull, '') als wahr ausgewertet und gibt daher NULL zurück und NULL wird daher in db gespeichert, auch wenn es False ist.

Sie müssten dies tun. Ändern Sie es, wie es Ihnen passt.

DECLARE @YesNoNull VARCHAR(10) 
DECLARE @YNN BIT 
SELECT @YesNoNull = <VALUE FROM XML) 
SELECT @YNN = CASE @YesNoNull 
     WHEN 'True' THEN 1 
     WHEN 'False' THEN 0 
     WHEN '' THEN NULL 
    END 
INSERT INTO Details(Name, YesNo) 
VALUES ('John', @YNN); 
+0

Ich habe hier einen Punkt. Vor dem Framing von XML sind die Werte True, False und Null in C#. Nach dem Framing von XML wird es automatisch in "1", "0" und "" geändert. Mit dieser XML-Datei muss ich OPENXML in der SQL-Stored-Prozedur verwenden und den Cursor durchlaufen und die Werte als 1, 0 und Null speichern. Entschuldigung für die verursachten Unannehmlichkeiten und es hat keinen Sinn, die Case-Funktion hier zu schreiben. –

+0

Können Sie den Teil der gespeicherten Prozedur veröffentlichen, in dem die Aktion stattfindet? –

+0

Es ist gelöst. Ich habe "1" und 1 für Varchar- und Bit-Werte verwendet. Danke vielmals –

2

sieht aus wie Sie @YesNoNull als BIT erklärt haben, anstatt erklären ihn als VARCHAR(1), und Ihr Code funktioniert OK. Das Problem liegt darin, dass NULLIF'' als 0 behandelt.

Verwandte Themen