Ungültiger Spaltenname auf dem SQL Server-Update nach dem Erstellen der Spalte
Erkennt jemand, was ist falsch mit diesem code für SQL-Server?
IF NOT EXISTS(SELECT *
FROM sys.columns
WHERE Name = 'OPT_LOCK'
AND object_ID = Object_id('REP_DSGN_SEC_GRP_LNK'))
BEGIN
ALTER TABLE REP_DSGN_SEC_GRP_LNK
ADD OPT_LOCK NUMERIC(10, 0)
UPDATE REP_DSGN_SEC_GRP_LNK
SET OPT_LOCK = 0
ALTER TABLE REP_DSGN_SEC_GRP_LNK
ALTER COLUMN OPT_LOCK NUMERIC(10, 0) NOT NULL
END;
Wenn ich diese ausführe, bekomme ich:
Msg 207, Ebene 16, Status 1, Zeile 3
Ungültige Spalte name 'OPT_LOCK'.
auf dem update-Befehl.
Dank.
InformationsquelleAutor der Frage Thom | 2012-09-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
In diesem Fall können Sie das problem vermeiden, indem die Spalte als
NOT NULL
und Einstellung der Werte für die vorhandenen Zeilen in einer Anweisung wie pro meine Antwort hier.Generell das problem ein parse/compile-Problem. SQL Server versucht zu kompilieren, alle Anweisungen in der batch vor der Ausführung jeder der Anweisungen.
Wenn eine Anweisung auf eine Tabelle verweist, die es gar nicht gibt die Anweisung ist Thema der verzögerten Zusammenstellung. Wenn die Tabelle bereits vorhanden ist, es wirft einen Fehler, wenn Sie auf eine nicht vorhandene Spalte. Der beste Weg dies zu tun ist, die DDL in einem anderen Stapel von der DML.
Wenn eine Aussage sowohl verweist auf eine nicht vorhandene Spalte in einer vorhandenen Tabelle und eine nicht existente Tabelle der Fehler kann oder kann nicht geworfen werden, bevor die Kompilierung abgegrenzt.
Können Sie entweder senden Sie es in separate Chargen (z.B. durch Verwendung der batch separator
GO
im client-tools) oder führen Sie es in einem untergeordneten Bereich, die separat kompiliert mithilfeEXEC
oderEXEC sp_executesql
.Den ersten Ansatz würde verlangen, dass Sie umgestalten von code als eine
IF ...
nicht über batches.InformationsquelleAutor der Antwort Martin Smith
Für Ihre Informationen,Sie können ersetzen die
IF NOT EXISTS
mit derCOL_LENGTH
Funktion. Es nimmt zwei Parameter,Tabelle Namen und
Spalte Sie sind auf der Suche nach
Wenn die Spalte gefunden wird, dann gibt es den Bereich der Datentyp der Spalte Ab: Int (4 Byte), wenn nicht gefunden, dann gibt es eine
NULL
.So können Sie diese wie folgt und auch kombinieren 3 Anweisungen in einem.
Macht es einfacher.
InformationsquelleAutor der Antwort Prakash