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

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

我需要添加一个特定的列,如果它不存在。我有如下内容,但它总是返回false:

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

如何检查SQLServer数据库的表中是否存在列?


万千封印
浏览 2149回答 3
3回答

潇潇雨雨

SQLServer 2005以后:IF EXISTS(SELECT 1 FROM sys.columns            WHERE Name = N'columnName'           AND Object_ID = Object_ID(N'schemaName.tableName'))BEGIN     -- Column ExistsEND马丁·史密斯的版本更短:IF COL_LENGTH('schemaName.tableName', 'columnName') IS NOT NULLBEGIN     -- Column ExistsEND

函数式编程

更简洁的版本IF COL_LENGTH('table_name','column_name') IS NULLBEGIN/* Column does not exist or caller does not have permission to view the object */END关于查看元数据的权限的要点适用于所有答案,而不仅仅是这个答案。注意,第一个参数表名为COL_LENGTH可以按要求采用一、二或三种部件名称格式。引用不同数据库中的表的示例是COL_LENGTH('AdventureWorks2012.HumanResources.Department','ModifiedDate')与使用元数据视图相比,此答案的一个不同之处是元数据函数(如COL_LENGTH无论有效隔离级别如何,始终只返回有关已提交更改的数据。

胡子哥哥

根据您的具体要求调整以下内容:if not exists (select                      column_name               from                      INFORMATION_SCHEMA.columns               where                      table_name = 'MyTable'                      and column_name = 'MyColumn')     alter table MyTable add MyColumn int编辑以处理编辑到问题:这应该有效-仔细检查代码中是否有愚蠢的错误;例如,您是在应用INSERT的同一个数据库上查询Information_Schema吗?在这两种语句中,表/列名中是否都有错误?
打开App,查看更多内容
随时随地看视频慕课网APP