【问题标题】:How to convert NVARCHAR comma-delimited list to INT?如何将 NVARCHAR 逗号分隔列表转换为 INT?
【发布时间】:2013-07-19 18:44:26
【问题描述】:

有没有办法在 SQL Server 中执行以下操作:

DECLARE @list nvarchar(MAX) = '1, 2, 3, 4, 5, 6';
SELECT * FROM table WHERE ID IN ( @list );

-- Column ID is type bigint

错误:

将数据类型 nvarchar 转换为 bigint 时出错。

【问题讨论】:

标签: sql sql-server casting type-conversion


【解决方案1】:

您不想将其转换为 int。相反,请使用like 进行比较:

select *
from table
where ', '+@list+', ' like ', '+cast(id as varchar(255)) + ', ';

这样做的缺点是查询不会使用索引。如果这很重要,那么您可以使用动态 SQL:

DECLARE @list nvarchar(10) = '1, 2, 3, 4, 5, 6';
declare @sql nvarchar(max) = 'SELECT * FROM table WHERE ID IN ('+ @list +')';

exec sp_executesql @sql;

【讨论】:

    【解决方案2】:

    使用Dynamic SQL

    DECLARE @SQLQuery AS NVARCHAR(500)
    DECLARE @list nvarchar(10) = '1, 2, 3, 4, 5, 6';
    
    SET @SQLQuery = 'SELECT * FROM table WHERE ID IN (' + @list + ')'
    EXECUTE(@SQLQuery)
    

    【讨论】:

      猜你喜欢
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 2016-10-24
      • 2018-08-16
      • 2011-09-29
      相关资源
      最近更新 更多