Ich erstelle eine neue Tabelle in Microsoft SQL Server 2000, indem ich den Code schreibe, anstatt die GUI zu verwenden. Ich versuche zu lernen, wie man es "manuell" macht.Deklarieren einer Standardeinschränkung beim Erstellen einer Tabelle
Dies ist der Code, den ich eigentlich bin mit, und es funktioniert gut:
CREATE TABLE "attachments"
(
"attachment_id" INT NOT NULL,
"load_date" SMALLDATETIME NOT NULL,
"user" VARCHAR(25) NOT NULL,
"file_name" VARCHAR(50) NOT NULL,
CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"),
CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"),
CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE())
)
ich den Primärschlüssel festgelegt haben, Fremdschlüssel und überprüfen Einschränkungen auf ihre eigenen, weil ich auf diese Weise für einen Namen festlegen Wenn sie andernfalls inline deklariert würden, würde SQL Server einen zufälligen Namen generieren, und ich "mag" es nicht.
Das Problem entstand, als ich die Standardwert Einschränkung zu erklären versucht: zu den Informationen im Internet sucht und wie Microsoft SLQ Server Management Studio erstellt es, verstand ich, dass es sowohl inline erstellt werden kann und auf seinem eigenen:
"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()
oder
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
die Inline-Methode funktioniert gut, aber es erzeugt wie üblich einem zufälligen Namen für die constaint, wirft die Stand-alone-Methode einen Fehler, sagen Incorrect syntax near 'FOR'.
.
Auch, wenn ich erstelle die Tabelle und dann ALTER
es, der Befehl funktioniert:
ALTER TABLE "attachments"
ADD CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
Als Referenz hier ist der vollständige Code, den ich auszuführen versuche:
CREATE TABLE "attachments"
(
"attachment_id" INT NOT NULL,
"load_date" SMALLDATETIME NOT NULL,
"user" VARCHAR(25) NOT NULL,
"file_name" VARCHAR(50) NOT NULL,
CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"),
CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"),
CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE()),
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
)
Ich bin hier total versagt, was versuche ich nicht zu tun, oder mache ich etwas falsch?
Edit:
David M zeigte, wie eine benannte Standardeinschränkung mit der Inline-Syntax hinzufügen, ich bin noch auf der Suche zu verstehen, wenn der Stand-alone-Syntax völlig falsch ist, oder es ist meine Schuld.
Ich stimme der Bearbeitung zu. David Ms Antwort behandelt nicht, wie man eine Beschränkung über eine eigenständige Beschränkungsdeklaration hinzufügt, aber da BOL keine Beispiele hat, wo man die Standardbeschränkung nennen kann * außer * über die Art, wie David M gezeigt hat, denke ich, dass es sicher ist Angenommen, SQL Server (inkonsistent) unterstützt diese Syntax nicht. –
Siehe auch: [Falsche Syntax in der Nähe von 'für' SQL Server] (https://stackoverflow.com/questions/42440431/) – paulsm4