使用OPENJSON()在ADO使用报错:指定了非不二类型的表达式

发布时间 2023-04-20 14:30:50作者: o李一波o

背景:工单管理功能,供应商信息字段是存的JSON字符串(数据库是2008R2版本),这个功能没有使用ES,现在业务需要增加供应商相关信息的查询

实现:利用OPENJSON函数

用ADO拼接Sql执行的时候报以上错误,复制sql出来放到DBeaver里面执行又没有问题,同样的sql,至于任务紧张不展开研究了, 换成存储过程就好了

               IF isnull(@SupplierId,'')<>''
	 	set @where = @where + ' and CHARINDEX(
	                    @SupplierId,
	                    stuff(
	                    (
		                    SELECT '',''+ SupplierId 
							FROM OPENJSON(SKUInfoJson) WITH (
	    	                    SupplierId varchar(10)
	                        )
		                    for xml path('''')
	                    ),1,1,'''')
	                )>0 '
	 	
	       IF isnull(@SupplierName,'')<>''
	 	set @where = @where + ' and CHARINDEX(
	                    @SupplierName,
	                    stuff(
	                    (
		                    SELECT '',''+ SupplierName 
							FROM OPENJSON(SKUInfoJson) WITH (
	    	                    SupplierName nvarchar(50)
	                        )
		                    for xml path('''')
	                    ),1,1,'''')
	                )>0 '
学习链接:https://learn.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server?view=sql-server-ver15