sqlserver 中 in 嵌套子查询,子查询是调用函数,为什么查询没有结果,有人知道是什么原因?

Q哪吒三太子 2018-04-25 12:11:04
SQL语句:
对应函数:
对应数据:
请问有没有人知道这个是什么原因?刚开始以为是拼接的时候,没有加引号导致,后来设置了引号之后,发现还是没有效果。百思不得其解,想想问问这个究竟是什么原因导致的???本人原来一直使用的mysql,在mysql中使用好像没有任何问题。但是在sql server中就不行,请各位大神们,指导。
...全文
1335 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 版主 2018-04-25
  • 打赏
  • 举报
回复
建议把函数,定义成表值函数。 先百度一下 "sqlserver 表值函数",有问题再来追问。
吉普赛的歌 版主 2018-04-25
  • 打赏
  • 举报
回复
1. 加一个切分字符串的表值函数:
IF OBJECT_ID('[dbo].[Fun_String2ToStringArray]') IS NOT NULL 
    DROP FUNCTION [dbo].[Fun_String2ToStringArray]
GO
CREATE FUNCTION [dbo].[Fun_String2ToStringArray](@str NVARCHAR(MAX), @split NVARCHAR(10))
RETURNS @table TABLE ([item] NVARCHAR(max))
AS
BEGIN
    IF LEN(@split) = 0
      BEGIN
        SET @split = N','
      END
 
    DECLARE @xml XML;
    SET @xml = CONVERT(XML, '<x><![CDATA[' + replace(CONVERT(VARCHAR(MAX), @str), @split, ']]></x><x><![CDATA[') + ']]></x>')
 
    INSERT INTO @table
      SELECT item
      FROM   (SELECT c.value('text()[1]', 'nvarchar(4000)') [item]
              FROM   @xml.nodes('/x') t(c)) t
      WHERE  item IS NOT NULL
 
    RETURN
END
GO
2. 查询语句:
SELECT * FROM dbo.T_DOC_TATEGORIES as a
WHERE a.id in (
	select item from  [dbo].[Fun_String2ToStringArray]('xxxx,yyyy',',')
)
Q哪吒三太子 2018-04-25
  • 打赏
  • 举报
回复
引用 1 楼 RINK_1的回复:
你这个函数返回的是一个单独的字符串,只是这个字符串的内容是由多个字符串用‘,’分隔拼接的,例如‘AAAAA,BBBBB,CCCCC’这样的,这时用IN就没有效果了。试试下面的。

SELECT * FROM dbo.T_DOC_TATEGORIES 
WHERE CHARINDEX(ID,(SELECT DBO.GETPARENTLIST('XXXXXXX')))>0

那如果是我拼接成`AAA','BBB'的形式为何也不行???
RINK_1 2018-04-25
  • 打赏
  • 举报
回复
你这个函数返回的是一个单独的字符串,只是这个字符串的内容是由多个字符串用‘,’分隔拼接的,例如‘AAAAA,BBBBB,CCCCC’这样的,这时用IN就没有效果了。试试下面的。

SELECT * FROM dbo.T_DOC_TATEGORIES 
WHERE CHARINDEX(ID,(SELECT DBO.GETPARENTLIST('XXXXXXX')))>0

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧