将带有逗号分隔的多个数字的nvarchar转换为一组数字

时间:2014-12-06 17:26:39

标签: sql sql-server

我一直在研究,但我找不到转换具有nvarchar的存储过程参数的方法,如下所示:

'123456,123455,123454,123453,123452'

123456,123455,123454,123453,123452

表示需要数字的IN子句

@Co_Ordenes varchar(max) 
--code
WHERE T_OrdenAtencion.Co_OrdenAt in (@Co_Ordenes) 

其中@co_ordenesnvarchar,但IN必须收到数字列表

1 个答案:

答案 0 :(得分:1)

您基本上有三种选择:

  • 您可以使用动态SQL。
  • 你可以调用某种split()函数来分割字符串(网上有各种各样的实现)。
  • 您可以使用like

(在使用XML或递归CTE进行解析方面存在更多神秘的可能性。)

以下是使用like;

的方法
where ',' + @Co_Ordenes + ',' like '%,' + cast(T_OrdenAtencion.Co_OrdenAt as varchar(255)) + ',%'

但是,这会阻止查询在Co_OrdenAt列上使用索引。

您是否有可能以其他格式存储列表?例如,将列表放在临时表中会简化查询,生成的查询可以利用可用的索引吗?