如何检查SQL Server表中是否存在列?

若是它不存在,我须要添加一个特定的列。 我有相似如下内容,但始终返回false: 数据库

IF EXISTS(SELECT *
          FROM   INFORMATION_SCHEMA.COLUMNS
          WHERE  TABLE_NAME = 'myTableName'
                 AND COLUMN_NAME = 'myColumnName')

如何检查SQL Server数据库表中是否存在列? spa


#1楼

我须要相似的SQL SERVER 2000,而且正如@Mitch指出的那样,这仅适用于inm 2005+。 code

若是它能够帮助其余人,这最终对我有用: it

if exists (
    select * 
    from 
        sysobjects, syscolumns 
    where 
        sysobjects.id = syscolumns.id 
        and sysobjects.name = 'table' 
        and syscolumns.name = 'column')

#2楼

我更喜欢INFORMATION_SCHEMA.COLUMNS而不是系统表,由于Microsoft不保证在版本之间保留系统表。 例如, dbo.syscolumns在SQL 2008中仍然能够使用,但已过期,之后能够随时删除。 table


#3楼

尝试这个... object

IF NOT EXISTS(
  SELECT TOP 1 1
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE 
    [TABLE_NAME] = 'Employees'
    AND [COLUMN_NAME] = 'EmployeeID')
BEGIN
  ALTER TABLE [Employees]
    ADD [EmployeeID] INT NULL
END

#4楼

调整如下内容以适合您的特定要求: select

if not exists (select
                     column_name
               from
                     INFORMATION_SCHEMA.columns
               where
                     table_name = 'MyTable'
                     and column_name = 'MyColumn')
    alter table MyTable add MyColumn int

编辑处理问题 :应该能够-仔细检查代码中的愚蠢错误; 您是否在例如将插入内容应用于同一数据库的状况下查询INFORMATION_SCHEMA? 您的表/列名称中是否有错字? 数据


#5楼

首先检查dbo.syscolumns (包含字段定义的内部SQL Server表)中是否存在table / columnid / name )组合,若是不存在,则发出适当的ALTER TABLE查询来添加它。 例如: 查询

IF NOT EXISTS ( SELECT  *
            FROM    syscolumns
            WHERE   id = OBJECT_ID('Client')
                    AND name = 'Name' ) 
ALTER TABLE Client
ADD Name VARCHAR(64) NULL