0

ManufacturersSQL Server データベースで識別されたすべてを一覧表示したいと考えています。

製造元の名前が含まれるテーブルは多数ありますが、適切な名前の列にあるとは限りません。ただし、列名LIKE%manuf%です。

そう:

SELECT TABLE_NAME, COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME LIKE '%manuf%' 
ORDER BY TABLE_NAME;

クエリを実行するテーブルのリストと、クエリを実行する列名を取得します。

これらのテーブルからメーカー名を照会するにはどうすればよいですか?

4

1 に答える 1

2

それらすべてを 1 つの結果セットで返したい場合は、次のクエリを使用できます。

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_SCHEMAANSI 標準の一部ですが、通常は SQL Server カタログ ビューを使用することをお勧めします。


もう 1 つ:INFORMATION_SCHEMA正しくない結果が返される場合は、何らかの破損が発生している可能性がありDBCC CHECKDBます。そのデータベースで実行して確認する必要があります。

于 2013-02-13T17:30:21.120 に答える