RSS Feed

Check if Column Exists in SQL Table or Not

Sometimes we may need to check whether a particular column exists in a table [or in database, in some scenarios] or not. We can always open table structure & check it manually. But in real programming, we need to check it with the help of SQL queries. We can verify same [Whether a column exists in SQL Server table] by executing SQL queries or calling a function .
This article will help you to find or check that column exists or not in 10 distinct ways.

1.
We can use ColumnProperty function to check whether column (Amount) exists for a given table name (i.e. Item). The OBJECT_ID function will return ID of the table. ColumnProperty method will then take Object_Id, Column_Name to search & ColumnId as parameter to see if the column exists or not.
--Checks in Item table for Amount column
USE Northwind;
IF COLUMNPROPERTY(OBJECT_ID('Item'), 'Amount', 'ColumnId') IS NULL
  PRINT 'does not exist'
ELSE
  PRINT 'exists'

2.
Our intention of finding a column in a table can also be attained with the help of SYSOBJECTS & SYSCOLUMNS with InnerJoin. We will check the Table Name in the SYSOBJECTS & Column Name in SYSCOLUMNS and join the query with ID column of both the tables.
--Checks in Orders table for OrderID column
USE Northwind;
IF((SELECT count(*)  
FROM SYSOBJECTS   
INNER JOIN SYSCOLUMNS ON SYSOBJECTS.ID = SYSCOLUMNS.ID  
WHERE  
 SYSOBJECTS.NAME = 'Orders'  
 AND SYSCOLUMNS.NAME = 'OrderID')>0)
PRINT 'Exists'
ELSE
PRINT 'Does not exist'

3.
The another way is to use EXISTS Method to find a column name in a given table from INFORMATIONSCHEMA.Columns Table.
--Checks in Employees table for ReportsTo column
USE Northwind;
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.Columns 
           WHERE TABLE_NAME = 'Employees'
           AND COLUMN_NAME = 'ReportsTo')
PRINT 'Exists'
ELSE
PRINT 'Does not exist'

4.
We can also achieve the same with the help of COL_LENGTH method. This method will take 2 parameters viz. TableName and other ColumnName.
--Checks in Employees table for BirthDate column
USE Northwind;
IF ((COL_LENGTH('Employees','BirthDate'))>0)
PRINT 'Exists'
ELSE
PRINT 'Does not exist'

5.
If the count of Columns is greater than 0, then the column exits otherwise doesn’t exist. This logic can also be used in finding column in InformationSchema.Column Table.
--Checks in Employees table for Address column
USE Northwind;
if((SELECT COUNT(*)
  FROM INFORMATION_SCHEMA.COLUMNS
 WHERE TABLE_NAME = 'Employees' AND
 COLUMNS.Column_Name='Address')>0)
PRINT 'Exists'
ELSE
PRINT 'Does not exist'

6.
Using SYSCOLUMNS table, we can use its "name" column for columnname & match the ID with the OBJECT_ID method. OBJECT_ID method takes table name as parameter and returns Table ID. And then this ID can be used to match with SYSCOLUMNS’s ID.
--Checks in Employees table for Region column
USE Northwind;
IF((SELECT  COUNT(name)
            FROM    syscolumns
            WHERE   id = OBJECT_ID('Employees')
                    AND name = 'Region' )>0)
PRINT 'Exists'
ELSE
PRINT 'Does not exist'

7.
We can use User Defined Functions to serve our purpose. Example is given below:an UDF named CheckColumnExistsInTable is created with 2 parameters viz. TableName & Columname.This function will return a VARCHAR string Exists or Does Not Exists. Inside function, an IF condition is being used to find column name in SYSColumns Table.
--Checks in Employees table for City column
CREATE FUNCTION CheckColumnExistsInTable(@tablename VARCHAR(30) ,
@columnname VARCHAR(30))
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @message VARCHAR(20)
IF((SELECT COUNT(NAME) 
    FROM syscolumns 
    WHERE id=object_id('[' + @tablename + ']') AND NAME=@columnname)>0)
SET @message='Exists';
ELSE
SET @message='Does not Exists';
RETURN @message;
END


USE Northwind;
--Calling UDF
PRINT dbo.CheckColumnExistsInTable('Employees','City')

8.
COALESCE is the other option to check for a column in a table. With the below query, COALESCE will return COL_LENGTH if column exists, otherwise return 0.
--Checks in Employees table for FirstName column
USE Northwind;
IF((SELECT COALESCE(COL_LENGTH('Employees','FirstName'),0))>0)
PRINT 'Exists'
ELSE
PRINT 'Does not exist'

9.
Achieving the same with the help of Sub-Query can be possible.
--Checks in Employees table for TitleOfCourtesy column
USE Northwind;
IF((SELECT COUNT(Column_NAME) 
    FROM INFORMATION_SCHEMA.Columns c 
    WHERE c.Column_Name='TitleOfCourtesy' AND c.Table_Name=(SELECT Table_Name 
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE Table_Name='Employees'))>0)
PRINT 'Exists'
ELSE
PRINT 'Does not exist'

10.
We will fetch the count of required Column_name i.e. FirstName (which should be equal to 1 if column exists) from INFORMATION_SCHEMA.COLUMNS table and match the Table_Name column of INFORMATION_SCHEMA.COLUMNS table with Table_Name column of INFORMATION_SCHEMA.TABLES table. It will return 1 if column exists in the table or else return 0. So, we will print messages if the column exits or does not exist.
--Checks in whole Northwing DB for column Firstname
USE Northwind;
IF((SELECT COUNT(COLUMNS.Column_Name) AS ColumnExists
    FROM INFORMATION_SCHEMA.COLUMNS COLUMNS,INFORMATION_SCHEMA.TABLES TABLES
    WHERE COLUMNS.TABLE_NAME=TABLES.TABLE_NAME AND
    UPPER(COLUMNS.COLUMN_NAME)=UPPER('FirstName'))>0)
PRINT 'Exists'
ELSE
PRINT 'Does not exist' 

No comments:

Post a Comment