如何在一个表中搜索特定的列名

时间:2018-07-23 18:30:56

标签: sql database ssms

我已经在stackoverflow上搜索了这个问题,但是大多数问题都比我想要的要深一些。许多问题与查找具有特定列名的表有关。

我通过SSMS连接到数据库。我找到了要按SELECT * FROM Item搜索的表。在Item表中,我要搜索所有字段名(或列名),并搜索select包含特定字符串'Size'的字段名。我以为这样的事情就可以了

Select * FROM Item WHERE column_name LIKE '%SIZE%'

虽然不起作用。如何指定它以搜索所有列名称以查找包含“大小”的名称?

谢谢。

6 个答案:

答案 0 :(得分:1)

这应该是使您获得所需内容的通用查询。

USE [database_name]
GO 
SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%SIZE%'
   AND t.name = 'Item'
ORDER BY schema_name, table_name;

无论您通过哪种方式运行SQL登录,都将需要正确的权限。

答案 1 :(得分:0)

SELECT [Name] 
FROM sys.columns
WHERE OBJECT_NAME(object_id)='Item'
AND [Name] LIKE '%Size%';

答案 2 :(得分:0)

您可以使用

SELECT * FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='zzzzz' and COLUMN_NAME like '%size%' 

答案 3 :(得分:0)

这将在名为Item的表中查找名称为“ SIZE”的列:

SELECT sch.COLUMN_NAME, sch.* 
FROM INFORMATION_SCHEMA.COLUMNS AS sch
WHERE TABLE_NAME = 'Item'  
  AND COLUMN_NAME LIKE '%SIZE%'

这是您想要的吗?

答案 4 :(得分:0)

我认为这就是您要寻找的,只需将database_Name替换为您的数据库名称:

Declare @myQuery varchar(max) = ' Select ';
Declare @columnName varchar(max) = '';

Declare GetColumnNames Cursor
For
    SELECT COLUMN_NAME
    FROM database_Name.INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = N'Item'
        And database_Name.INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME like '%SIZE%'
OPEN GetColumnNames  

FETCH NEXT FROM GetColumnNames   
INTO @columnName

WHILE @@FETCH_STATUS = 0  
BEGIN
    Set @myQuery += @columnName + ', '

    FETCH NEXT FROM GetColumnNames   
    INTO @columnName
END   
CLOSE GetColumnNames;  
DEALLOCATE GetColumnNames;

-- Chop off the end character
SET @myQuery = LEFT(@myQuery, LEN(@myQuery) - 1) 

Set @myQuery += ' From Item'
exec(@myQuery)

答案 5 :(得分:0)

您必须采用两步方法来完成最终查询。

首先,您需要使用表元数据来标识您感兴趣的列,这些元数据可以从sys模式或INFORMATION_SCHEMA表中获取。提出的一些答案将帮助您获取该信息。

接下来,您将使用在第一步中确定的列名来构建您感兴趣的实际查询。如果这是您要执行的一次性任务,只需复制并粘贴结果即可将元数据查询转换为新的SELECT查询作为您的列列表。如果您需要使用不同的LIKE字符串以编程方式或多次执行此任务,则需要花费时间来编写一些动态SQL。

将其全部包装后,它看起来会像这样:

--Step 1; The meta data part

DECLARE @ColumnList NVARCHAR(MAX)
       ,@SQL NVARCHAR(MAX)

SELECT 
  @ColumnList = COALESCE(@ColumnList+',','') + COLUMN_NAME
FROM 
  INFORMATION_SCHEMA.COLUMNS
WHERE 
  TABLE_SCHEMA = 'schema'
  AND 
  TABLE_NAME = 'TableName'
  AND 
  COLUMN_NAME LIKE '%SIZE%'

SELECT @ColumnList;

--Step 2; The dynamic SQL part

SET @SQL = 'SELECT ' + @ColumnList + ' FROM schema.TableName;';

EXECUTE sys.sp_executesql @SQL;