2014-03-26 66 views
0

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

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

谢谢你们。

+0

http://stackoverflow.com/questions/16188257/querying-binary-column-using-like-in-sql-server是一个类似的问题与体面的答案 – zedfoxus

+0

我不明白你在问什么。你想搜索整个数据库(因此每个表的每个字段)或二进制(8)字段? –

+0

我会很高兴找到二进制(8)字段,但每个表都在数据库中具有该类型。目前为止我所见过的查询只搜索文本。 – smedley89

回答

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'; 
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 

应给予足够的信息来生成每一个这样的表查询。

+0

谢谢,这会返回所有具有二进制(8)类型的表/列。我希望能够在该类型的所有表/列中搜索特定值。说,搜索database_name为0x000123asd,并有一个返回,告诉我在整个数据库中发生值的位置。 我会继续玩,感谢你的开始! – smedley89