我已经在stackoverflow上搜索了这个问题,但是大多数问题都比我想要的要深一些。许多问题与查找具有特定列名的表有关。
我通过SSMS
连接到数据库。我找到了要按SELECT * FROM Item
搜索的表。在Item
表中,我要搜索所有字段名(或列名),并搜索select
包含特定字符串'Size'
的字段名。我以为这样的事情就可以了
Select * FROM Item WHERE column_name LIKE '%SIZE%'
虽然不起作用。如何指定它以搜索所有列名称以查找包含“大小”的名称?
谢谢。
答案 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;