[英]conversion failed when converting the varchar value to int error in SQL
我只想運行一個查詢,但過了一會兒卻給了我“轉換失敗”錯誤。 這是我要運行的查詢:
'將varchar值......轉換為int時轉換失敗
Declare @ID varchar(max)
set @ID = '33, 691, 688, 58, 42, 3'
select listing_id, rpt_id, name_en, phone
from tsgb_extract_110107
where rpt_id in (@ID )
我將rpt_id作為varchar變量傳遞給查詢。
假設tsgb_extract_110107是表,將varchar與varchar比較可以解決您的問題
select listing_id, rpt_id, name_en, phone
from tsgb_extract_110107
where rpt_id in ('3300718',
'3305691',
'3234688',
'3358162',
'3423680',
'3406570',
'3368217',
'3363510',
)
編輯
您可以將@ID
拆分為一個表,然后使用join
Declare @ID varchar(max)
set @ID = '33, 691, 688, 58, 42, 3'
DECLARE @xml as xml
SET @xml = cast(('<X>'+replace(@ID, ',' ,'</X><X>')+'</X>') as xml)
;WITH criteria AS
(
SELECT LTRIM(N.value('.', 'varchar(10)')) as value FROM @xml.nodes('X') as T(N)
)
select listing_id, rpt_id, name_en, phone
from tsgb_extract_110107 INNER JOIN criteria ON rpt_id = criteria.value
試試這個
select listing_id, rpt_id, name_en, phone
from tsgb_extract_110107
where ISNUMERIC(rpt_id) And Convert(numeric(18,0),rpt_id) in (3300718,
3305691,
3234688,
3358162,
3423680,
3406570,
3368217,
3363510,
)
首先,您需要一個字符串拆分器。 這是摘自亞倫·伯特蘭(Aaron Bertrand)的文章的文章 :
CREATE FUNCTION [dbo].[SplitStrings_XML]
(
@List NVARCHAR(MAX),
@Delimiter NVARCHAR(255)
)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
(
SELECT Item = y.i.value('(./text())[1]', 'nvarchar(4000)')
FROM
(
SELECT x = CONVERT(XML, '<i>'
+ REPLACE(@List, @Delimiter, '</i><i>')
+ '</i>').query('.')
) AS a CROSS APPLY x.nodes('i') AS y(i)
);
然后,在WHERE
子句中使用該函數:
select
listing_id, rpt_id, name_en, phone
from tsgb_extract_110107
where
rpt_id in (
select cast(rtrim(ltrim(value)) as int) from dbo.SplitStrings_XML(@ID)
)
使用以下查詢
Declare @ID varchar(max)
set @ID = '33, 691, 688, 58, 42, 3'
declare @str nvarchar(max)
set @str = 'select listing_id, rpt_id, name_en, phone
from tsgb_extract_110107
where rpt_id in ('+@ID+' )'
exec sp_executesql @str
試試這個樣本
--create table tsgb_extract_110107 (rpt_id int , listing_id int, name_en varchar(50) , phone varchar(10))
--insert into tsgb_extract_110107 values (1,1,'abc','123'),(33,33,'abc','33'),(691,691,'abc','691'),(58,58,'abc','58'),(3,3,'abc','3')
Declare @ID nvarchar(max)
set @ID = '33, 691, 688, 58, 42, 3'
Declare @sql nvarchar(max)
set @sql = 'select listing_id, rpt_id, name_en, phone
from tsgb_extract_110107
where rpt_id in ( '+ @ID + ' ) '
select @sql
EXEC sp_executesql @sql
幫我的是這個功能:
CREATE FUNCTION [dbo].[f_SplitString] (@sep char(1), @s varchar(512))
RETURNS table
AS
RETURN (
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT pn,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
FROM Pieces
)
放入where子句,如下所示:
where Ids in (SELECT s FROM [dbo].[f_SplitString](',', @Ids))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.