Wie füge ich Standardwerte in eine SQL-Tabelle ein?

78

Ich habe einen Tisch wie diesen:

create table1 (field1 int,
               field2 int default 5557,
               field3 int default 1337, 
               field4 int default 1337)

Ich möchte eine Zeile einfügen, die die Standardwerte für Feld2 und Feld4 enthält.

Ich habe es versucht, insert into table1 values (5,null,10,null)aber es funktioniert nicht undISNULL(field2,default) auch nicht.

Wie kann ich der Datenbank mitteilen, dass sie beim Einfügen einer Zeile den Standardwert für die Spalte verwenden soll?

Zbigniew Wazeliniak
quelle
2
Siehe auch diese Frage für den Fall, dass alle Spalten Standardwerte haben.
stakx - nicht mehr beitragen
1
Bitte poste niemals " funktioniert nicht ", ohne zu definieren, wie .
underscore_d

Antworten:

86

Fügen Sie nur nicht die Spalten, für die Sie den Standardwert verwenden möchten, in Ihre insert-Anweisung ein. Zum Beispiel:

INSERT INTO table1 (field1, field3) VALUES (5, 10);

... übernimmt die Standardwerte für field2und field4und weist 5 bis field1und 10 zu field3.

Aroth
quelle
1
Was ist, wenn die Spalte keine Standardwerte definiert hat und außerdem auf "NOT ALLOW NULLS" gesetzt ist?
Danon
2
@Danon Das ist nicht die Frage des OP. Bitte posten Sie eine neue Frage, anstatt einen solchen Kommentar zu hinterlassen. Ich kann jedoch nicht einmal erraten, was Sie fragen, da es nicht sinnvoll ist, einen Standardwert in eine Spalte einzufügen, für die in beiden Spalten kein Standardwert definiert ist und NOT NULL
binki
@binki Vielleicht sollte ich meinen Kommentar umformulieren: "aroth: Ihre Antwort ist wegen einer möglichen Ausnahme nicht vollständig, wenn die Spalte keine Standardwerte definiert hat und auch auf 'NOT ALLOW NULLS' gesetzt ist"
Danon
1
@Danon - Das OP gibt "Ich möchte eine Zeile mit den Standardwerten für Feld2 und Feld4 einfügen" an und fragt "Wie kann ich der Datenbank mitteilen, dass sie beim Einfügen einer Zeile den Standardwert für die Spalte verwenden soll?". Sie haben Recht, dass diese Antwort den Fall nicht abdeckt, wenn keine Standardwerte definiert sind. Da die Frage jedoch ausdrücklich nicht nach diesem Fall fragt, ist es nicht wirklich richtig, die Antwort als unvollständig zu beschreiben. Sie sprechen von einer völlig anderen Frage (die am besten als separate Frage gestellt wird).
aroth
155

Es wird empfohlen, Ihre Spalten so aufzulisten, dass Sie unabhängig von Tabellenänderungen sind (neue Spalten- oder Spaltenreihenfolge usw.).

insert into table1 (field1, field3)  values (5,10)

Wenn Sie dies jedoch nicht möchten, verwenden Sie das DEFAULTSchlüsselwort

insert into table1 values (5, DEFAULT, 10, DEFAULT)
gbn
quelle
13
Genial! Genau das habe ich gesucht. Hinweis: Sie können auch die Spalten und Werte angeben, indem Sie DEFAULT anstelle von NULL übergeben. Sie erhalten den Standardwert, wenn eine DEFAULT-Einschränkung vorliegt, oder NULL, wenn die Spalte nullwertfähig ist und keine Standardeinschränkung angegeben ist.
John
2
Das funktioniert , aber wenn ich versuchte, Lust zu haben, (CASE WHEN This = That THEN 'SpecifiedValue' ELSE DEFAULT END)würde es nicht funktionieren, sehr zu meinem Leidwesen. Ich musste entweder mehrere Insert-Anweisungen vorbereiten, um alle meine Szenarien abzudecken, oder Dynamic-SQL verwenden. :(
MikeTeeVee
Aus irgendeinem Grund konnte ich dies mit dem DB-Browser für SQLite nicht zum Laufen bringen. Ich habe mich immer über einen Syntaxfehler beschwert DEFAULT. Ich musste die nicht standardmäßigen Spalten wie im oberen Beispiel angeben, dann nur Werte für diese angeben, und dann funktionierte es schließlich.
Will Matheson
Die offizielle Dokumentation sagt nichts darüber aus. Ist diese Verwendung von DEFAULTsicher? (Wenn es nicht dokumentiert ist, können wir uns nicht beschweren, wenn die Funktionalität in der zukünftigen Version von sqlite3 ohne Vorankündigung weggelassen wird.)
am
@ynn Darüber hinaus heißt es in dem Buch Using SQLite (S.326): " Es gibt keine Möglichkeit, einen Standardwert anzugeben, außer indem die Spalte aus der Spaltenliste herausgelassen wird oder der Standardwert bekannt ist und explizit eingefügt wird. "
ynn
40

Der beste Weg ist:

insert your_table
default values
inon
quelle
5
Dies funktioniert, wenn allen Spalten Standardeinstellungen zugeordnet sind und die Spaltennamen nicht angegeben werden sollen.
Umbersar
5
Obwohl dies nicht unbedingt eine vollständige Antwort auf die gestellte Frage war, haben Sie versehentlich eine Frage beantwortet, die ich hatte, also danke dafür :)
Ryan
5

Versuchen Sie es so

INSERT INTO table1 (field1, field3) VALUES (5,10)

Dann sollten Feld2 und Feld4 Standardwerte haben.

fkerber
quelle
3

Wenn Ihre Spalten keine NULLWerte enthalten sollen , müssen Sie auch die Spalten definieren NOT NULL, andernfalls die übergebenenNULL anstelle der Standardeinstellung verwendet und erzeugt keinen Fehler.

Wenn Sie diesen Feldern keinen Wert übergeben (für den Sie die Felder angeben müssen, die Sie verwenden möchten), werden die Standardeinstellungen verwendet:

INSERT INTO 
  table1 (field1, field3) 
VALUES   (5,10)
Oded
quelle
1

Sie können auf diese Weise schreiben

GO
ALTER TABLE Table_name  ADD
column_name decimal(18, 2) NOT NULL CONSTRAINT Constant_name DEFAULT 0
GO
ALTER TABLE Table_name SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
Biddut
quelle
0

Um die Standardwerte einzufügen, sollten Sie sie wie folgt weglassen:

Insert into Table (Field2) values(5)

Alle anderen Felder haben null oder ihre Standardwerte, wenn sie definiert wurden.

Beatles1692
quelle
-5
CREATE PROC SP_EMPLOYEE                             --By Using TYPE parameter and CASE  in Stored procedure
(@TYPE INT)
AS
BEGIN
IF @TYPE=1
BEGIN
SELECT DESIGID,DESIGNAME FROM GP_DESIGNATION
END
IF @TYPE=2
BEGIN
SELECT ID,NAME,DESIGNAME,
case D.ISACTIVE when 'Y' then 'ISACTIVE' when 'N' then 'INACTIVE' else 'not' end as ACTIVE
 FROM GP_EMPLOYEEDETAILS ED 
  JOIN  GP_DESIGNATION D ON ED.DESIGNATION=D.DESIGID
END
END
RAM
quelle
6
Ich halte das nicht für eine Antwort.
Giulio Caccin