Eine prägnantere Version
IF COL_LENGTH('table_name','column_name') IS NULL
BEGIN
/* Spalte existiert nicht oder der Aufrufer hat keine Berechtigung, das Objekt anzuzeigen */
END
Der Hinweis auf Berechtigungen zum Anzeigen von Metadaten gilt für alle Antworten, nicht nur für diese.
Beachten Sie, dass der erste Parameter Tabellenname zu COL_LENGTH
im erforderlichen Ein-, Zwei- oder Dreiteilnamenformat angegeben werden kann.
Ein Beispiel, das auf eine Tabelle in einer anderen Datenbank verweist, lautet:
COL_LENGTH('AdventureWorks2012.HumanResources.Department','ModifiedDate')
Ein Unterschied zu dieser Antwort im Vergleich zur Verwendung der Metadatenansichten besteht darin, dass Metadatenfunktionen wie COL_LENGTH
immer nur Daten über abgeschlossene Änderungen zurückgeben, unabhängig vom gültigen Isolationsgrad.
18 Stimmen
Ich glaube eigentlich nicht, dass etwas mit dem Code in der Frage falsch ist: Funktioniert gut für mich in 2008 R2. (Vielleicht haben Sie es in der falschen Datenbank ausgeführt? Vielleicht war Ihre Datenbank großgeschrieben und Sie hatten die Groß- und Kleinschreibung in Ihren myTableName / myColumnName-Strings nicht richtig? Diese Art von Abfrage scheint flexibler zu sein als die COL_LENGTH-Lösung: Ich kann sie gegen eine andere Datenbank ausführen und sogar über einen Datenbanklink, indem ich "INFORMATION_SCHEMA" entsprechend voranstellen. Konnte das nicht mit der METADATEN-Funktion COL_LENGTH sehen.
4 Stimmen
@mwardm -
COL_LENGTH('AdventureWorks2012.HumanResources.Department ','ModifiedDate')
funktioniert gut.7 Stimmen
Kleiner verwandter Hinweis: Wenn Sie eine Spalte direkt nach der Spaltenhinzufügung aktualisieren möchten (ich glaube, viele Benutzer haben nach diesem Artikel zu diesem Zweck gesucht), könnten Sie
EXEC sp_executesql
mit dem geformtenUPDATE
Statement verwenden.2 Stimmen
Die richtige Antwort lautet, dass Sie die Datenbank hinzufügen sollten, gegen die Sie überprüfen. Es sollte also
FROM [IhreDatenbank].INFORMATION_SCHEMA.COLUMNS
sein.1 Stimmen
Sie können auch syscolumns und sysobjects sehr einfach verwenden.
0 Stimmen
IF EXISTS(SELECT 1 FROM sys.columns WHERE Name = N'columnName' AND Object_ID = Object_ID(N'schemaName.tableName')) BEGIN -- Spalte vorhanden END