在将商店列表从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))
答案 0 :(得分:1)
字符串'1,2'
不是整数。您无法在其上使用IN
。
你有两个选择。将值填入字符串中。 SQL不支持IN
列表的参数。
或者,使用LIKE
:
WHERE ',' + @STORENUMS + ',' LIKE '%,' + @CAST(STORE_NUM as VARCHAR(255)) + ',%'
答案 1 :(得分:0)
我建议你这样做:
您必须拆分您的varchar How do I split a string so I can access item x?
然后你可以使用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)
)