首页 > 解决方案 > TSql SqlParameters - 非法值或排序规则问题?

问题描述

以下sql运行并返回一行

SELECT * FROM MyTable WHERE MyCol='01««01'

但是,如果此 sql 被参数化并执行

EXEC execustesql 'SELECT * FROM MyTable WHERE MyCol=@p1',N'p1 nvarchar(6)',@p1=N'01««01'

它返回 0 行。

我尝试将各种 COLLATION(Latin1_General_CI_AI、SQL_Latin1_General_CP1_CI_AI)显式添加到列和参数占位符的过滤器中,例如

WHERE MyCol COLLATE collation=@p1 COLLATE collation

但似乎无法返回任何行。

另一个我不确定是否相关的复杂情况是字符 « 是 ascii 174,但如果我运行

SELECT convert(varbinary(max),'01««01')
returns 0x3031ABAB3031  i.e. 171

所以我也尝试过使用该值并将 ascii 174 替换为 asc 171 即使它是不同的字符。

那么我的问题是排序规则问题还是 Sql 参数不接受包含某些 ascii 值的值......或其他?

标签: tsqlasciicollation

解决方案


推荐阅读