搜索整个数据库在sql中查找扩展的ascii代码

时间:2013-05-03 09:08:22

标签: sql-server tsql

我们在扩展的ascii代码进入我们的数据库时遇到问题(128-155)

无论如何都要搜索整个数据库,并显示可能存在于这些字符中的任何字符的结果以及它们在表和列中的位置。

希望这是有道理的。

我有脚本来搜索整个数据库,但是在打开行时有问题。

DECLARE @SearchStr nvarchar(100)

SET @SearchStr != between char(32) and char(127)

我最初有这个功能,但我需要扩展我正在寻找的范围。

SET @SearchStr = '|' + char(9) + '|' + char(10) + '|' + char(13)

由于

2 个答案:

答案 0 :(得分:1)

目前还不清楚您的数据是什么样的,但这可能有助于您入门:

declare @TestData table (String nvarchar(100))

insert into @TestData select N'abc'
insert into @TestData select N'def'
insert into @TestData select char(128)
insert into @TestData select char(155)

declare @SearchPattern nvarchar(max) = N'%['
declare @i int = 128
while @i <= 155
begin
    set @SearchPattern += char(@i)
    set @i += 1
end
set @SearchPattern += N']%'

select @SearchPattern

select String
from @TestData
where String like @SearchPattern

当然,您需要添加一些代码来循环遍历要查询的每个表和列(请参阅this question),并且此代码可能在不同的排序规则上表现不同。

答案 1 :(得分:0)

...其中dodgyColumn是您可疑数据的列......

WHERE(patindex('%[' + char(127) + '-' + char(255) + ']%', dodgyColumn COLLATE Latin1_General_BIN2) > 0)

这适用于我们,在我们原本正常的ASCII数据(字符,数字,标点,美元和百分号等)中识别扩展的ASCII字符。