IN (replace())语句为什么两条结果不同?

-Arvin 2017-10-11 10:02:36
SELECT * FROM #tempCgPlanProject where ProjectGUID IN (''''+(replace('60ca3a38-3ef7-e611-80b3-e04f43069c1a;8aafd33c-d1f8-e611-80b3-e04f43069c1a',';',''','''))+'''')
SELECT * FROM #tempCgPlanProject where ProjectGUID IN ('60ca3a38-3ef7-e611-80b3-e04f43069c1a','8aafd33c-d1f8-e611-80b3-e04f43069c1a')

为什么这两条语句输出结果不同呢?
select (''''+(replace('60ca3a38-3ef7-e611-80b3-e04f43069c1a;8aafd33c-d1f8-e611-80b3-e04f43069c1a',';',''','''))+'''')

的结果就是语句二中in()的内容啊
...全文
362 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
听雨停了 2017-10-12
  • 打赏
  • 举报
回复
引用 楼主 oArvin1234 的回复:
SELECT * FROM #tempCgPlanProject where ProjectGUID IN (''''+(replace('60ca3a38-3ef7-e611-80b3-e04f43069c1a;8aafd33c-d1f8-e611-80b3-e04f43069c1a',';',''','''))+'''')
SELECT * FROM #tempCgPlanProject where ProjectGUID IN ('60ca3a38-3ef7-e611-80b3-e04f43069c1a','8aafd33c-d1f8-e611-80b3-e04f43069c1a')

为什么这两条语句输出结果不同呢?
select (''''+(replace('60ca3a38-3ef7-e611-80b3-e04f43069c1a;8aafd33c-d1f8-e611-80b3-e04f43069c1a',';',''','''))+'''')

的结果就是语句二中in()的内容啊


SELECT (''''+(replace('60ca3a38-3ef7-e611-80b3-e04f43069c1a;8aafd33c-d1f8-e611-80b3-e04f43069c1a',';',''','''))+'''')

SELECT '60ca3a38-3ef7-e611-80b3-e04f43069c1a','8aafd33c-d1f8-e611-80b3-e04f43069c1a'


从查询的结果就可以看出,很明显的问题,你的第一个查询出来的是一个字符串。你的第二个查询那是两个字符串。结果能一样吗?
-Arvin 2017-10-12
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
第一个这样写试试:
DECLARE @sql NVARCHAR(MAX)= 'SELECT * FROM #tempCgPlanProject where ProjectGUID IN ('
    + ( ''''
        + ( REPLACE('60ca3a38-3ef7-e611-80b3-e04f43069c1a;8aafd33c-d1f8-e611-80b3-e04f43069c1a',
                    ';', ''',''') ) + '''' ) + ')'
EXEC(@sql)

谢谢 这样肯定的可以的,但的整个存储过程都没有用字符串去拼接SQL所以我用
SELECT * FROM #tempCgPlanProject where ProjectGUID IN (SELECT ProjCod FROM(SELECT fs.AllItem AS ProjCod FROM dbo.fn_split(@ProjCodeList,';') AS fs) p1)
这样解决了 ,语句中的变量=以上字符串。
  • 打赏
  • 举报
回复
MARK 一下
顺势而为1 2017-10-12
  • 打赏
  • 举报
回复
你的SQL语句中用了 + 号连接符, 已属于动态SQL , 要这样写 DECLARE @sql varchar(1000) SET @sql='SELECT * FROM #tempCgPlanProject where ProjectGUID IN ('+''''+(replace('60ca3a38-3ef7-e611-80b3-e04f43069c1a;8aafd33c-d1f8-e611-80b3-e04f43069c1a',';',''','''))+''')' exec (@sql)
二月十六 2017-10-12
  • 打赏
  • 举报
回复
第一个这样写试试:
DECLARE @sql NVARCHAR(MAX)= 'SELECT * FROM #tempCgPlanProject where ProjectGUID IN ('
+ ( ''''
+ ( REPLACE('60ca3a38-3ef7-e611-80b3-e04f43069c1a;8aafd33c-d1f8-e611-80b3-e04f43069c1a',
';', ''',''') ) + '''' ) + ')'
EXEC(@sql)

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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