如何檢查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
相關文章
相關標籤/搜索