TSQL:使用大小写用项目填充字符串列表

TSQL : Using case to fill a string list with items

我正在尝试使用插入中的案例创建一些逻辑

这是我正在使用的代码,但无法编译

INSERT INTO @MyList VALUES
(CASE @pCodTraitement
            WHEN   'CGPFDG'  then    '0220' 
            WHEN   'CGPPS'   then    '5275' 
            WHEN   'CGPFP'   then    '5276' 
            WHEN   'CGPGC'   then    '5277', '0220'                 
            ELSE '0241' 
END )

解决方案 '''5277'''+','+'''0220''' 无效

我需要满足第 4 个条件,就像项目而不是文本一样,因为我想在

之后使用它

我不想将其作为文本块

因为我会浏览它的项目

...

SELECT *
FROM MyTable
WHERE MyColumn IN (SELECT Value FROM @MyList)

...

由于您需要在其中一个条件下插入多个值,并且 CASE 到 return 多个值不可能以这种方式插入,因此您需要中断操作分开并做类似

的事情
IF @pCodTraitement = 'CGPGC'
BEGIN
INSERT INTO @MyList
VALUES ('5277'), ('0220');
END ELSE
BEGIN
INSERT INTO @MyList VALUES
(CASE @pCodTraitement
            WHEN   'CGPFDG'  then    '0220' 
            WHEN   'CGPPS'   then    '5275' 
            WHEN   'CGPFP'   then    '5276' 
            ELSE '0241' 
END )
END

这里是猜测,但可能是以下解决方案之一:

INSERT INTO @MyList (ColumName)
SELECT SS.[value]
FROM (VALUES(CASE @pCodTraitement WHEN 'CGPFDG' THEN '0220' 
                                  WHEN 'CGPPS' THEN '5275' 
                                  WHEN 'CGPFP' THEN '5276' 
                                  WHEN 'CGPGC' THEN '5277,0220'                 
                                  ELSE '0241' 
             END))V(S)
     CROSS APPLY STRING_SPLIT(V.S,',') SS;


DECLARE @Values table (CodTraitement, [value]);
INSERT INTO @Values (CodTraitement, [value])
VALUES('CGPFDG','0220'),
      ('CGPPS','5275'),
      ('CGPFP','5276'),
      ('CGPGC','5277'),
      ('CGPGC','0220');

INSERT INTO @MyList (ColumName)
SELECT ISNULL(V.[value],'0241')
FROM (VALUES(@pCodTraitement))p(CodTraitement)
     LEFT JOIN @Values V ON p.CodTraitement = V.CodTraitement;

另一种方法是将 UNION ALL 与匹配 CGPGC:

的多行一起使用
INSERT INTO @MyList SELECT '0220' WHERE @pCodTraitement = 'CGPFDG'
          UNION ALL SELECT '5275' WHERE @pCodTraitement = 'CGPPS'
          UNION ALL SELECT '5276' WHERE @pCodTraitement = 'CGPFP'
          UNION ALL SELECT '5277' WHERE @pCodTraitement = 'CGPGC'
          UNION ALL SELECT '0220' WHERE @pCodTraitement = 'CGPGC';

或者构建一个VALUES派生table和过滤器:

INSERT INTO @MyList
  SELECT outcol FROM 
  (
    VALUES('CGPFDG','0220'),
          ('CGPPS', '5275'),
          ('CGPFP', '5276'),
          ('CGPGC', '5277'),
          ('CGPGC', '0220')
  ) AS dv(pCodTraitement, outcol)
  WHERE pCodTraitement = @pCodTraitement;