2009-04-16 12 views

答えて

3

フィールドは、XML型の実際にしている場合は、このクエリは、あなたが探しているものをあなたに与えます:

select * from information_schema.columns 
where DATA_TYPE = 'XML' 

マルク・

+0

フィールドはvarcharです。それは何かを少し難しくするものです。 – Lonzo

2

実行をこの:

select 'select distinct ''' || a.name || '.' || b.name 
|| ''' from ' || b.name 
|| 'where ' || b.name || ' like ''%<%/>%'' union ' 
from systable a 
join syscolumns b on (a.id = b.id) 
join systypes c on (b.type = c.xtype) 
where a.type ='U' and c.name = ('CHAR', 'CHARN', 'VARCHAR', 'VARCHARN'); 

最初に結果セットには、データベース内の文字列ごとに1行が表示されます。

select distinct 'テーブル。 '%<%/>%'のようなコラム

結果セットを取り出し、最後のユニオンを切り取り、SQLステートメントとして結果セットを実行します。 XML-ishのように見える行が1つ以上ある列のテーブル名と列名を返します。

編集:これはメモリからのものです。 systypesへの結合と型名が間違っている可能性があるので、systypesとcheckから選択してください。

+1

良いsultion。備考のカップル:あなたは '|'の代わりに '+'が必要ですSQLで。また、結合はsys.tablesから ' を読み込む必要があります。sys.columns c(t.object_id = c.object_id)'の上に ' – edosoft

+0

SQL-92に準拠する必要がある場合は、systableまたはsys.tablesカタログの代わりにINFORMATION_SCHEMAを使用してくださいビュー(SQL Server固有のビュー) –

関連する問題