如果您希望所有这些都在一个结果集中返回,您可以使用此查询:
DECLARE @cmd NVARCHAR(MAX);
SET @cmd = STUFF((
SELECT ' UNION ALL SELECT '+QUOTENAME(COLUMN_NAME)+' FROM '+QUOTENAME(TABLE_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%manuf%'
ORDER BY TABLE_NAME
FOR XML PATH(''),TYPE
).value('.','NVARCHAR(MAX)'),1,11,'')
;
EXEC( @cmd);
这要求它们都是 (n)varchar 数据类型。如果遇到问题,请添加演员表:
SELECT ' UNION ALL SELECT CAST('+QUOTENAME(COLUMN_NAME)+' AS NVARCHAR(MAX)) FROM '+QUOTENAME(TABLE_NAME)
这似乎是一个非常奇怪的数据库设计。你可能想重新审视...
如果INFORMATION_SCHEMA
不适合你使用这个:
DECLARE @cmd NVARCHAR(MAX);
SET @cmd = STUFF((
SELECT ' UNION ALL SELECT '+QUOTENAME(c.name)+' FROM dbo.'+QUOTENAME(t.name)
FROM sys.columns c
JOIN sys.tables t
ON c.object_id = t.object_id
WHERE c.name LIKE '%name%'
AND t.is_ms_shipped = 0
ORDER BY t.name
FOR XML PATH(''),TYPE
).value('.','NVARCHAR(MAX)'),1,11,'')
;
EXEC( @cmd);
虽然INFORMATION_SCHEMA
是 ANSI 标准的一部分,但使用 SQL Server 目录视图通常是首选方式。
还有一件事:如果INFORMATION_SCHEMA
返回不正确的结果,您可能会发生某种损坏,您应该通过DBCC CHECKDB
在该数据库中运行来检查。