出现这个错误的原因是因为我们对sql_varian类型的字段进了like搜索,而sql_varian类型的字段是不支持like搜索的。比如,我们对
sys.extended_properties系统视图的value字段进行模糊搜索,sql命令如下:
select * from sys.extended_properties where [value] like '%销售%'
执行上面语句就会报出
"参数数据类型 sql_variant 对于 like 函数的参数 1 无效的错误"。那么我们要如何去解决这个问题呢?总不能因为sql_varian类型的字段不支持like搜索,我们就不对sys.extended_properties的value字段进行搜索吧,而在实际中,这个字段经常需要进行模糊搜索。
正确的解决方法是,将sql_varian类型在where条件中转化为varchar类型再进行搜索就可以了,比如还是对sys.extended_properties进行模糊搜索的例子,我们将sql语句改成下面这样,再执行就不会报错了:
select * from sys.extended_properties where cast([value] as varchar(1000)) like '%销售%'
执行修改后的命令,查询出来了正确的结果。
那么为什么sql_variant类型会不支持Like搜索呢?这是因为sql_variant一种特殊的数据类型,它可以用于存储 SQL Server 2005支持的各种数据类型(但不包括 text、ntext、image、timestamp 和 sql_variant)的值。也就是说,它是一个不确定的数据类型,如果我们要对它加减或其它运算,必须先将它转换为其基本数据类型值,再来操作。这也就解决了为什么sql_variant类型不能进行like搜索的原因了。