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