sql server使用in关键字传递字符串数组查询


布偶的表弟派大星丶
2024-12-21 01:09:44 (3月前)


’‘,’‘客户强制’‘,’‘Coloum Uom’‘,’‘显示Marka’‘,’‘显示折扣金额


</跨度>
’‘,’‘显示折扣%In


</跨度>
’‘, ’‘

计算
</跨度>
基于重量率’’’

和商店的程序是

选择 折扣%In


</跨度>
’‘

计算
</跨度>
基于重量
率’)
和PageConfig_CompanyId = 1

然后结果还可以


3 条回复
  1. 0# 部落用户 | 2019-08-31 10-32



    您误解了SQL Server中字符串的处理方式。你有的字符串(

    ‘’’Sales Entry Grid Cursor’’,’’Customer Mandatory’’,’’Coloum Uom’’,’’Show Marka’’,’’Show Discount Amount In Grid’’,’’Show Discount % In Grid’’,’’Calculation based on Weight *rate’’’

    )是


    </强>
    字面值,而不是多个值。

    IN

    不会对它“起作用”,因为它正在寻找一行具有整个字符串的值

    PageConfig_settingsName




    这里有2个选项。首先是分割你的字符串并进行比较:




    1. SELECT pageconfig_action
      FROM [RetailSoft].[dbo].[tbl_pageconfig]
      CROSS APPLY STRING_SPLIT(@setting, ‘,’) SS
      WHERE [PageConfig_settingsName] = SS.[value]
      AND PageConfig_CompanyId = 1;

    2. </code>


    请注意,您不需要每个项目周围的引号(除非它们的值中确实有这些引号)



    如果您不在SQL Server 2016+上搜索delimitedsplit8k(如果您在2008年),或者如果您在2012/2014,则为delimitedsplit8k_lead。



    否则,您可以使用表值变量并分别传递每个值:




    1. DECLARE @Setting table (setting varchar(255));
      INSERT INTO @Setting (setting)
      VALUES (‘Sales Entry Grid Cursor’),
      (‘Customer Mandatory’),
      (‘Coloum Uom’),
      (‘Show Marka’),
      (‘Show Discount Amount In Grid’),
      (‘Show Discount % In Grid’),
      (‘Calculation based on Weight *rate’);

    2. SELECT P.pageconfig_action
      FROM [RetailSoft].[dbo].[tbl_pageconfig] P
      JOIN @Setting S ON S.setting = P.[PageConfig_settingsName]
      WHERE P.PageConfig_CompanyId = 1;

    3. </code>

  2. 1# v-star*위위 | 2019-08-31 10-32



    你需要做

    Setting

    表,而不是varchar。

    然后就不需要动态的sql,你可以像这样保持简单




    1. declare @Setting table (name varchar(50))

    2. insert into @Setting (name)
      values (‘Sales Entry Grid Cursor’),
      (‘Customer Mandatory’),
      (‘Coloum Uom’),
      (‘Show Marka’),
      (‘Show Discount Amount In Grid’),
      (‘Show Discount % In Grid’),
      (‘Calculation based on Weight *rate’)

    3. Select pageconfig_action
      from [RetailSoft].[dbo].[tbl_pageconfig]
      Where [PageConfig_settingsName] in (select name from @setting)
      and PageConfig_CompanyId=1

    4. </code>

登录 后才能参与评论