前几天做干活时发现 了一个问题,
代码如下:
declare @userid nvarchar(10)
set @userid = '100001'
select [dbo].[f_GetUserList](@userid)
declare @aa nvarchar(400),@sql nvarchar(1000)
set @aa = [dbo].[f_GetRelationUserList_New](@userid)
print @aa
---SQL1:
set @sql ='
select * from userlist where
userid in (' + @aa + ')'
exec(@sql)
---SQL2:
select * from userlist where userid in (@aa)
奇怪的是第1个SQL可以正常出来数据,而第二个就不行
网上问了一下说是
---SQL1实际是:
select * from userlist where userid in (1,2,3,31)
---SQL2是:
select * from userlist where userid in ('1,2,3,31')
最后采用了将函数首先取到相应的值,并将函数值过滤出相要的数据,然后再加到sql里,而且还是用charindex去判断的
虽然问题暂时得到了解决,但是不知道 这样当数据量大的时候会不会反应比较慢。
先记下来,以备以后参考
在执行SQL时遇到一个问题,使用标量值函数[f_GetUserList]和[f_GetRelationUserList_New]获取数据。当尝试用'in'操作符结合函数结果查询时,SQL1(将函数结果拼接进SQL字符串执行)能正常返回数据,而SQL2(直接使用函数结果作为'in'的参数)无法工作。了解到SQL1实际上将函数结果解析为数值列表,而SQL2则将其视为单个字符串。为了解决这个问题,采用先获取函数值,再通过charindex过滤数据的方法,但担心这种方法在大数据量下可能影响性能。记录此问题,留作未来参考。
857

被折叠的 条评论
为什么被折叠?



