【问题标题】:With IN Clause when Passing Collection as Parameter In Sql Server在 Sql Server 中将集合作为参数传递时使用 IN 子句
【发布时间】:2013-08-27 16:27:35
【问题描述】:

查询给出 O/p 为

ItemSizeNM

(colName)

'U','V','X','Y'

但是当我在我所做的代码中使用它作为 IN Query 的输入时。 它没有给出相同的结果集。为什么会发生这种情况...? 表 MstItemSize 有正确的数据。

 declare @tblRingSize table ( ringSize varchar(100))        
     declare  @ringSize varchar(100)         
     select   @ringSize= cast((otherringSize) as varchar) 
     from ##tempBand  where styleNo='BD00002';   
  1. 插入到@tblRingSize 从 dbo.SplitStrings_CTE 中选择项目(@ringSize,',');

  2. 从 MstItemSize 中选择 ItemSizeNm,其中 SizeTypeNm ='Ring' 和
    项目尺寸Nm
    在 --('U','V','X','Y')

    ( 选择替换 ( (select STUFF((select ''',''' + ringSize from @tblRingSize For XML PATH('')),1,2,'') +'''' ) ,' ',''))

  3. 选择替换 ( (select STUFF((select ''',''' + ringSize from @tblRingSize For XML PATH('')),1,2,'') +'''' ) ,' ','')

【问题讨论】:

  • 尽量不要使用varchar,而是使用varchar(100)。另外,您为什么要使用全局##temp 表? SplitStrings_CTE 的定义是什么? ##tempBand中otherringSize的数据类型是什么?
  • 我使用 Global temp 因为我也想在其他查询中使用该表。SplitStrings_CTE 函数将逗号分隔字符,otherringSize 的数据类型是 varchar(100)
  • 其他查询在哪里?我也知道 split 函数的作用,但也许它做得不对(例如,varchar 声明可能会默默地截断您的字符串)。你从哪里得到的功能?
  • sqlperformance.com/2012/07/t-sql-queries/split-strings from Here 我得到了这个函数 SplitStrings_CTE
  • 跟踪你正在做的事情或你期望的输出真的很难。 @ringSize是多少?它是否包含那些字符串分隔符,所以它是@ringSize = '''U'',''V'',...'; 你期望什么输出?

标签: sql sql-server stored-procedures table-variable


【解决方案1】:

子查询不需要使用STUFFFOR XMLREPLACE

select 
    ItemSizeNm 
from 
    MstItemSize 
where SizeTypeNm ='Ring' 
and ItemSizeNm  in (select ringSize from @tblRingSize)

【讨论】:

  • 它只给出第一个值。即 U I Want It as U V X Y
  • 第二次替换给我一个正确的结果,如 'U'、'V'、'X'、'Y' 当我复制它并在 IN 子句中传递它时,它评论它工作正常。但是当使用那个 REPLACE 语句时它不起作用
  • 不需要相同的格式。事实上,它根本不应该被格式化——子查询应该返回一个记录集,而不是你手动构建的字符串。
  • sqlfiddle.com/#!3/d89a9/4 请参阅此示例。你会知道...第三个查询没有显示输出...为什么..?
  • 因为在您的场景中,您将整个字符串选择到记录集中,并且它试图将您构建的整个字符串与任何一个字符匹配。为了做你想做的事情(这也是完全没有必要的),你必须动态地构建你的整个 SQL 语句,就像这样:sqlfiddle.com/#!3/d89a9/86
猜你喜欢
  • 2011-06-11
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 2017-01-12
  • 2012-05-09
相关资源
最近更新 更多