如何在SQL Server中检查多个列是否存在

3

这是代码:

IF EXISTS(SELECT * FROM sys.columns
          WHERE Name = 'columnName' 
            AND OBJECT_ID = OBJECT_ID('tableName') )
BEGIN
    PRINT 'Your Column Exists'
END  

我想知道如何将这段代码转换为可以检查多个列名存在性的代码。


将等于运算符更改为IN运算符,然后是名称,类似于此: SELECT * FROM sys.columns WHERE Name IN ('columnName_1','columnName_2') AND OBJECT_ID = OBJECT_ID('tableName'). - Juan Ruiz de Castilla
像这样 -- 在 'columnName' 中的名称 ?? - needhelp
WHERE Name IN ('columnName_1','columnName_2')。 - Juan Ruiz de Castilla
@JuanRuizdeCastilla:在这种情况下,IN子句将失败,即使IN子句中的任何一列不存在,结果仍将显示您的列存在。请重新检查此内容。 - Paresh J
你是正确的,这里放置了正确的答案。 - Juan Ruiz de Castilla
3个回答

13

如果您正在测试是否所有列都在那里,可以使用:

IF 3 = (select count(*) Names 
    from sys.columns 
    where OBJECT_ID = OBJECT_ID('tableName')
    and Name in ('columnName1', 'columnName2', 'columnName3')
    )
BEGIN
PRINT 'Your Columns Exist'
END  

是的,这个会起作用。唯一的问题是硬编码的值为'3'。 - Paresh J
是的,但您也硬编码了列名称。 更通用的解决方案将具有要搜索的列名称的表格...或字符串列表...但是解决方案会更加复杂。 如果您需要更通用的内容...您想如何指定列列表? - Brian Pressler
是的,这就是为什么给你加上了+1。 - Paresh J
谢谢回答!但如果列来自不同的表怎么办? - needhelp
如果您想检查多个表中的字段,只需在if语句中为每个表连接使用AND进行相等性检查。像这样:如果3 =(选择计数()....用于table1中的字段)AND 2 =(选择计数()...用于table2中的字段)AND ...等等。 - Brian Pressler

-1

类似但更易理解的内容可能是:

IF EXISTS 
    (
      SELECT *
      FROM INFORMATION_SCHEMA.COLUMNS
      WHERE TABLE_NAME = 'Table Name'
      AND(COLUMN_NAME = 'column 1'
      or COLUMN_NAME = 'column 2'
      or COLUMN_NAME = 'column 3'
      or COLUMN_NAME = 'column 4')
    )
    SELECT 'Column exists in table' AS[Status];
    ELSE
    SELECT 'Column does not exist in table' AS[Status];

这个答案与下面的答案存在相同的问题。它只返回一个列而不是所有列时会返回true。 - dallin

-8

这个怎么样?

IF  EXISTS (SELECT * FROM sys.columns 
WHERE OBJECT_ID = OBJECT_ID('tableName')
AND( Name = 'columnName1' OR Name = 'columnName2' OR Name = 'columnName3')
)
BEGIN
PRINT 'Your Columns Exist'
END 

4
这个和我的不同之处在于如果这个存在,它会报告这些列的任何一个存在。而我的代码只有当它们全部存在时才会返回这些列存在的信息。 - Brian Pressler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接