Ich muss eine bestimmte Spalte hinzufügen, wenn sie nicht vorhanden ist. Ich habe so etwas wie das Folgende, aber es gibt immer false zurück:
IF EXISTS(SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'myTableName'
AND COLUMN_NAME = 'myColumnName')
Wie kann ich überprüfen, ob eine Spalte in einer Tabelle der SQL Server-Datenbank vorhanden ist?
COL_LENGTH('AdventureWorks2012.HumanResources.Department ','ModifiedDate')
funktioniert gut.EXEC sp_executesql
mit einer formuliertenUPDATE
Anweisung verwenden.FROM [YourDatabase].INFORMATION_SCHEMA.COLUMNS
Antworten:
Ab SQL Server 2005:
Martin Smiths Version ist kürzer:
quelle
sys.columns
Alter table Table_Name Add [ColumnName] NVarchar(max) NULL; Select COL_LENGTH('[TABLE_NAME]', '[COLUMN_NAME]')
COL_LENGTH
müssen nicht zitiert werden. Es ist theoretisch möglich, dass jemand eine Spalte erstellt, die tatsächlich den Namen hat[COLUMN_NAME]
- z. B.CREATE TABLE #T([[COLUMN_NAME]]] INT); SELECT * FROM #T
und dann wäre es mehrdeutig, wenn dies nicht die Regel wäre.Eine prägnantere Version
Der Punkt über Berechtigungen zum Anzeigen von Metadaten gilt für alle Antworten, nicht nur für diese.
Beachten Sie, dass der erste Name der Parametertabelle je nach
COL_LENGTH
Bedarf in einem, zwei oder drei Teilenamen vorliegen kann.Ein Beispiel für die Referenzierung einer Tabelle in einer anderen Datenbank ist
Ein Unterschied zu dieser Antwort im Vergleich zur Verwendung der Metadatenansichten besteht darin, dass Metadatenfunktionen, wie z. B.
COL_LENGTH
immer nur Daten zu festgeschriebenen Änderungen zurückgeben, unabhängig von der geltenden Isolationsstufe.quelle
IF OBJECT_ID('TableName','U') IS NULL
, um die Existenz von Objekten oder die ExistenzDB_ID('foo')
von Datenbanken zu überprüfen.x>>2
stattx/4
in C ++. Der ausführlichere Code (if exists (select column_name from information_schema ...)
) nimmt viel mehr Platz ein, aber niemand würde sich jemals am Kopf kratzen, um herauszufinden, was er tut.INFORMATION_SCHEMA
Ansichten odersys.columns
Treffer auf der Festplatte, währendCOL_LENGTH
zwischengespeicherte Datenbankmetadaten verwendet werden.Passen Sie das Folgende an Ihre spezifischen Anforderungen an:
Bearbeiten, um sich mit Bearbeiten zu befassen, um zu fragen : Das sollte funktionieren - überprüfen Sie Ihren Code sorgfältig auf dumme Fehler; Fragen Sie beispielsweise INFORMATION_SCHEMA in derselben Datenbank ab, auf die Ihre Einfügung angewendet wird? Haben Sie in beiden Anweisungen einen Tippfehler in Ihrem Tabellen- / Spaltennamen?
quelle
Versuche dies...
quelle
SELECT 1
anstelle vonSELECT TOP 1 1
;) verwenden.EXISTS
Anweisung optimiert SQL die Spalten automatisch (ähnlich wiecount(*)
), sodass diesSELECT *
ausreicht.and [TABLE_SCHEMA] = '???'
die WHERE-Klausel ergänzen .Für die Personen, die die Existenz der Spalte überprüfen, um sie zu löschen.
Ab SQL Server 2016 können Sie anstelle großer
IF
Wrapper neue DIE-Anweisungen verwendenquelle
Ich würde
INFORMATION_SCHEMA.COLUMNS
eine Systemtabelle vorziehen , da Microsoft nicht garantiert, dass die Systemtabellen zwischen den Versionen erhalten bleiben. Funktioniert beispielsweisedbo.syscolumns
immer noch in SQL 2008, ist jedoch veraltet und kann in Zukunft jederzeit entfernt werden.quelle
INFORMATION_SCHEMA
Ansichten nur ANSI-Standard-Metadaten enthalten. Dies reicht jedoch für einen Existenztest aus.Sie können die Systemansichten des Informationsschemas verwenden, um so ziemlich alles über die Tabellen herauszufinden, an denen Sie interessiert sind:
Mit den Ansichten Information_schema können Sie auch Ansichten, gespeicherte Prozeduren und so ziemlich alles über die Datenbank abfragen.
quelle
Versuchen Sie etwas wie:
Dann benutze es so:
Es sollte sowohl unter SQL Server 2000 als auch unter SQL Server 2005 funktionieren. Ich bin mir bei SQL Server 2008 nicht sicher, verstehe aber nicht, warum nicht.
quelle
Überprüfen Sie zunächst, ob die Kombination
table
/column
(id
/name
) indbo.syscolumns
(einer internen SQL Server-Tabelle, die Felddefinitionen enthält) vorhanden ist, und geben Sie gegebenenfalls die entsprechendeALTER TABLE
Abfrage aus, um sie hinzuzufügen. Zum Beispiel:quelle
Ein guter Freund und Kollege von mir hat mir gezeigt, wie Sie auch einen
IF
Block mit SQL-FunktionenOBJECT_ID
undCOLUMNPROPERTY
in SQL SERVER 2005+ verwenden können, um nach einer Spalte zu suchen. Sie können Folgendes verwenden:Hier können Sie sich selbst davon überzeugen
quelle
COLUMNPROPERTY
nur aktivieren .quelle
Dies hat bei mir in SQL 2000 funktioniert:
quelle
Versuche dies
quelle
INFORMATION_SCHEMA.TABLES
Spalten für eine bestimmte Tabelle und filtern sie auch nicht. Daher wird manchmal mehr als eine Zeile für dieselben Spaltennamen in separaten Tabellen zurückgegeben;).Ich brauchte ähnliche für SQL SERVER 2000 und, wie @Mitch betont, funktioniert dies nur in 2005+.
Sollte es jemand anderem helfen, hat dies am Ende für mich funktioniert:
quelle
quelle
quelle
Eine temporäre Tabellenversion der akzeptierten Antwort :
quelle
quelle
Die Antwort von Wheat ist gut, setzt jedoch voraus, dass Sie in keinem Schema oder in keiner Datenbank identische Paare aus Tabellenname und Spaltenname haben. Um es für diesen Zustand sicher zu machen, verwenden Sie dieses ...
quelle
Es gibt verschiedene Möglichkeiten, das Vorhandensein einer Spalte zu überprüfen. Ich würde dringend empfehlen, es so zu verwenden,
INFORMATION_SCHEMA.COLUMNS
wie es erstellt wurde, um mit dem Benutzer zu kommunizieren. Betrachten Sie folgende Tabellen:und sogar einige andere verfügbare Zugriffsmethoden zur Überprüfung
system catalog.
Auch keine Notwendigkeit zu verwenden
SELECT *
, testen Sie es einfach durchNULL value
quelle
SELECT *
mitEXISTS
, denn wenn vorhanden verwendet wird, werden nicht wirklich alle Zeilen und Spalten ausgewählt. Intern wird nur die Existenz und nicht alle Zeilen und Spalten überprüftEine der einfachsten und verständlichsten Lösungen ist:
quelle
Hier ist ein einfaches Skript, mit dem ich das Hinzufügen von Spalten in der Datenbank verwalte:
In diesem Beispiel
Name
ist dasColumnName
das hinzuzufügende undObject_Id
das dasTableName
quelle
Die folgende Abfrage kann verwendet werden, um zu überprüfen, ob die gesuchte Spalte in der Tabelle vorhanden ist oder nicht. Wir können die Entscheidung basierend auf dem gesuchten Ergebnis auch wie unten gezeigt treffen.
quelle
Noch eine Variation ...
quelle
Tabelle -> Skript Tabelle als -> neue Fenster - Sie haben Design-Skript. Überprüfen und finden Sie den Spaltennamen in neuen Fenstern
quelle
Führen Sie die folgende Abfrage aus, um zu überprüfen, ob die Spalte in der angegebenen Tabelle vorhanden ist:
quelle
Ein weiterer Beitrag ist das folgende Beispiel, in dem die Spalte hinzugefügt wird, falls sie nicht vorhanden ist.
Ich hoffe es hilft. Simone
quelle
quelle
quelle
Tun Sie etwas, wenn keine Spalte vorhanden ist:
Tun Sie etwas, wenn eine Spalte vorhanden ist:
quelle