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

Sql 如何在一个表中搜索特定的列名,sql,database,ssms,Sql,Database,Ssms,我已经在stackoverflow上搜索了这个问题,但大多数问题都比我想要的更深一些。许多问题都与查找具有特定列名的表有关 我通过SSMS连接到数据库。我已找到要通过SELECT*FROM Item搜索的表。在项表中,我想搜索所有字段名(或列名),然后选择包含特定字符串的字段名'Size'。我以为这样会管用 Select * FROM Item WHERE column_name LIKE '%SIZE%' 但它不起作用。如何指定它来搜索所有列名以查找包含“Size”的名称 谢谢。这应该是一个

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

我通过
SSMS
连接到数据库。我已找到要通过
SELECT*FROM Item
搜索的表。在
表中,我想搜索所有字段名(或列名),然后
选择包含特定字符串的字段名
'Size'
。我以为这样会管用

Select * FROM Item WHERE column_name LIKE '%SIZE%'
但它不起作用。如何指定它来搜索所有列名以查找包含“Size”的名称


谢谢。

这应该是一个通用的查询,可以帮助您找到所需的内容

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
登录名拥有正确的权限

您可以使用

SELECT [Name] 
FROM sys.columns
WHERE OBJECT_NAME(object_id)='Item'
AND [Name] LIKE '%Size%';
SELECT * FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='zzzzz' and COLUMN_NAME like '%size%' 

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

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

这就是您想要的吗?

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

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)

您必须采取两步方法来实现最终查询

首先,您需要通过使用表元数据来识别感兴趣的列,您可以从sys模式或INFORMATION_模式表中获取表元数据。几个建议的答案将帮助您获得这些信息

接下来,您将使用在第一步中标识的列名来构建您感兴趣的实际查询。如果这是一项一次性任务,只需将元数据查询的结果复制并粘贴到新的SELECT查询中作为列列表即可。如果您需要以编程方式或多次使用不同的字符串来完成此任务,那么您需要将时间花在编写一些动态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;

类似的老问题的答案有用吗?谢谢大家,这一切真的很有帮助!