消息245,级别16,状态1,行5转换将varchar值'1,2'转换为数据类型int时失败

时间:2016-08-06 19:17:18

标签: sql-server

在将商店列表从C#代码传递给SQL查询时,我收到此错误:

  

Msg 245,Level 16,State 1,Line 5
  将varchar值'1,2'转换为数据类型int时,转换失败。

请帮我解决这个问题。

declare @STORENUM Varchar(100)
set @STORENUM = '1,2'
print @STORENUM

SELECT DISTINCT 
    STORE_NUM, 
    ISNULL(LINE_1_ADDR, '') AS LINE_1_ADDR, 
    ISNULL(LINE_2_ADDR, '') AS LINE_2_ADDR, 
    ISNULL(LINE_3_ADDR, '') AS LINE_3_ADDR,
    CITY_NM, STATE_CD 
FROM 
    Store 
WHERE 
    STORE_NUM IN (CAST(@STORENUM AS INT))

3 个答案:

答案 0 :(得分:1)

字符串'1,2'不是整数。您无法在其上使用IN

你有两个选择。将值填入字符串中。 SQL不支持IN列表的参数。

或者,使用LIKE

WHERE ',' + @STORENUMS + ',' LIKE '%,' + @CAST(STORE_NUM as VARCHAR(255)) + ',%'

答案 1 :(得分:0)

我建议你这样做:

  1. 您必须拆分您的varchar How do I split a string so I can access item x?

  2. 然后你可以使用IN on(select * from table)

答案 2 :(得分:0)

declare @STORENUM Varchar(100) , @xml xml

set @STORENUM = '1,2'
set @xml = N'<root><r>' + replace(@STORENUM ,',','</r><r>') + '</r></root>'


SELECT DISTINCT 
    STORE_NUM, 
    ISNULL(LINE_1_ADDR, '') AS LINE_1_ADDR, 
    ISNULL(LINE_2_ADDR, '') AS LINE_2_ADDR, 
    ISNULL(LINE_3_ADDR, '') AS LINE_3_ADDR,
    CITY_NM, STATE_CD 
FROM 
    Store 
WHERE 
    STORE_NUM IN (
                  select r.value('.','varchar(max)') numbers 
                  from @xml.nodes('//root/r') as records(r)
                  )