Sql server 在NVARCHAR中查找特定的字节组合

Sql server 在NVARCHAR中查找特定的字节组合,sql-server,sql-server-2005,tsql,Sql Server,Sql Server 2005,Tsql,我们发现我们有一堆带有错误字符的法语字符串。 我们知道字符的十六进制表示形式是0xFDFF。 在NVarchar字段包含此字符的表中,是否有一种简单的方法来选择行 谢谢 编辑: oops,(n)char(x)陷阱 编辑2: select * from sys.sysobjects where charindex(CONVERT(nvarchar(1), 0xFDFF), name) > 0 谢谢你的帮助,亚瑟,+1谢谢你。 最后,我创建了一个游标并检查了表中每一行的所有字符,以找到奇怪

我们发现我们有一堆带有错误字符的法语字符串。 我们知道字符的十六进制表示形式是0xFDFF。 在NVarchar字段包含此字符的表中,是否有一种简单的方法来选择行

谢谢

编辑: oops,(n)char(x)陷阱

编辑2:

select * from sys.sysobjects where charindex(CONVERT(nvarchar(1), 0xFDFF), name) > 0 

谢谢你的帮助,亚瑟,+1谢谢你。
最后,我创建了一个游标并检查了表中每一行的所有字符,以找到奇怪的0xFDFF字符。我将所有ID连接到一个变量中,并从中获取列表。

DECLARE CURSOR ...
....
WHILE @@FETCH_STATUS = 0   
BEGIN   

        Declare @pos int
        set @Pos = 0

        while @Pos <= Len(@Str)
        begin
            if(convert(binary(2), substring(@Str, @pos, 1), 0) = 0xFDFF)
            begin
                set @ids = @ids + ',' + cast(@TheId as varchar)
                --Select @TheId, @Str
                break
            end
            set @Pos = @Pos + 1
        end

       FETCH NEXT FROM db_cursor INTO @TheId, @Str   
END   

CLOSE db_cursor   
DEALLOCATE db_cursor

select @ids
声明游标。。。
....
而@@FETCH\u STATUS=0
开始
声明@pos int
设置@Pos=0

虽然@Pos是一个老问题,但我仍然没有找到在nvarchar列中查找0xFDFF无效字符的准确解决方案。最后,这在大多数(如果不是所有)情况下都应该有效:

CHARINDEX('FDFF',CONVERT(varchar(max),(CAST(fname AS VARBINARY(max))),2)) > 0

不知怎么的,这不管用。可能是因为此字符不是普通字符。选择转换(nchar,0xFDFF)返回一个字符。有什么问题?没有结果?还是语法错误?没有结果,我知道至少有2行有此字符。当我选择convert(binary,FieldName,1)时我看到了它。这是一个错误,(n)char(x)pitfall现在我得到了表中的所有行。。。很奇怪。
DECLARE CURSOR ...
....
WHILE @@FETCH_STATUS = 0   
BEGIN   

        Declare @pos int
        set @Pos = 0

        while @Pos <= Len(@Str)
        begin
            if(convert(binary(2), substring(@Str, @pos, 1), 0) = 0xFDFF)
            begin
                set @ids = @ids + ',' + cast(@TheId as varchar)
                --Select @TheId, @Str
                break
            end
            set @Pos = @Pos + 1
        end

       FETCH NEXT FROM db_cursor INTO @TheId, @Str   
END   

CLOSE db_cursor   
DEALLOCATE db_cursor

select @ids
CHARINDEX('FDFF',CONVERT(varchar(max),(CAST(fname AS VARBINARY(max))),2)) > 0