How to check if a column exists in a SQL Server table?
SQL Server 2005 onwards:
IF EXISTS(SELECT 1 FROM sys.columns WHERE Name = N'columnName' AND Object_ID = Object_ID(N'schemaName.tableName'))BEGIN -- Column ExistsEND
Martin Smith's version is shorter:
IF COL_LENGTH('schemaName.tableName', 'columnName') IS NOT NULLBEGIN -- Column ExistsEND
A more concise version
IF COL_LENGTH('table_name','column_name') IS NULLBEGIN/* Column does not exist or caller does not have permission to view the object */END
The point about permissions on viewing metadata applies to all answers not just this one.
Note that the first parameter table name to COL_LENGTH
can be in one, two, or three part name format as required.
An example referencing a table in a different database is
COL_LENGTH('AdventureWorks2012.HumanResources.Department','ModifiedDate')
One difference with this answer compared to using the metadata views is that metadata functions such as COL_LENGTH
always only return data about committed changes irrespective of the isolation level in effect.
Tweak the below to suit your specific requirements:
if not exists (select column_name from INFORMATION_SCHEMA.columns where table_name = 'MyTable' and column_name = 'MyColumn') alter table MyTable add MyColumn int
Edit to deal with edit to question: That should work - take a careful look over your code for stupid mistakes; are you querying INFORMATION_SCHEMA on the same database as your insert is being applied to for example? Do you have a typo in your table/column name in either statement?