【问题标题】:Find all tables with a field containing xml string values查找具有包含 xml 字符串值的字段的所有表
【发布时间】:2009-04-16 07:57:15
【问题描述】:

我有一个 SQL 2005 数据库,我知道数据库中有一个表,其中包含一些 xml 字符串。我怎样才能找到这个表?

【问题讨论】:

  • 字段是varchar还是xml数据类型?

标签: sql xml sql-server-2005


【解决方案1】:

如果字段实际上是 XML 类型,那么此查询将为您提供您正在寻找的内容:

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

马克

【讨论】:

  • 该字段是一个 varchar。这就是让事情变得有点困难的原因
【解决方案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');

第一个结果集将在数据库中每个字符列有一行:

从 table where column like '%%' union 中选择不同的 'table.column'

获取该结果集,剪掉最后一个并集,然后将结果集作为 SQL 语句运行。它将为具有一行或多行看起来像 XML 的任何列返回表名和列名。

编辑:这是凭记忆的;连接到 systypes 和类型名称可能是错误的,所以从 systypes 中选择并检查。

【讨论】:

  • 很好。几句话:你需要'+'而不是'||'在 SQL 中。此外,连接应读取“从 sys.tables t join sys.columns c on (t.object_id = c.object_id)”
  • 如果您需要符合 SQL-92,请使用 INFORMATION_SCHEMA 而不是 systable 或 sys.tables 目录视图(这些是特定于 SQL Server 的)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 2017-05-19
  • 2013-05-13
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
相关资源
最近更新 更多