SQL搜索二进制值

时间:2014-03-26 20:48:49

标签: sql sql-server

我见过类似的查询,其中使用字符串或字符值来搜索整个数据库。这些查询不返回位于BINARY(8)字段中的结果。我试图修改这些查询无济于事。

有没有办法在整个数据库中搜索特定的二进制值,例如0x0000000000000017?

谢谢你们。

2 个答案:

答案 0 :(得分:0)

您可以使用系统表来查找此内容。

MSSQL:

 SELECT t.name AS table_name,
  c.name      AS column_name,
  ty.name
FROM sys.tables AS t
  INNER JOIN sys.columns c
    ON t.OBJECT_ID = c.OBJECT_ID
  INNER JOIN sys.types ty
    ON t.schema_id          = ty.schema_id
WHERE ty.system_type_id = 173

ORACLE:

SELECT owner,table_name, column_name,data_TYPE 
  FROM all_tab_columns where data_TYPE = 'RAW';

答案 1 :(得分:0)

嗯...

select *
from foo
where foo.binary8column  = 0x0000000000000017

应该这样做。如果您要枚举所有表格并查找所有binaryvarbinary列,则此查询

select table_name  = object_schema_name(tn.object_id) + '.' + tn.name ,
       column_name = c.name ,
       type        = t.name + '(' + convert(varchar,c.max_length) + ')'
from sys.types   t
join sys.columns c  on c.system_type_id = t.system_type_id
join sys.tables  tn on tn.object_id     = c.object_id
where t.name in ( 'binary', 'varbinary' )
  and c.max_length >= 8

应该提供足够的信息来为每个这样的表生成查询。