Solved

# Convert function help

Posted on 2013-12-31
333 Views
Experts,

Here is my code

declare @ItemIDList varchar(8000)

set @ItemIDList = '274686,275521,275522'

select * From MyDb..MyTable where ItemID in (convert(int,@ItemIDList ))

Getting the following error.
Conversion failed when converting the varchar value '274686,275521,275522' to data type int.

0
Question by:Tpaul_10
• 4
• 3

LVL 45

Expert Comment

Hi Paul,

'274686,275521,275522' is not an integer.  What are you trying to do?

Kent
0

Author Comment

Basically I have a list of ItemIDs with comma delimited and based on the ItemIDs I need to get some information for the ItemIDs from my database table and display some information.

Hope this clarifies and please let me know if you need any further information.

Thanks
0

Accepted Solution

Tpaul_10 earned 250 total points
I have found a different way

create table #TmpItem (TmpItemID int)

set @startIndex = 1
set @charIndex = charindex(',', @ItemIDList, @startIndex)
if @charIndex = 0 and len(@ItemIDList) > 0
set @charIndex = len(@ItemIDList) + 1
while(@charIndex <> 0)
begin
insert into #TmpItem (TmpItemID)
values (substring(@ItemIDList, @startIndex, @charIndex - @startIndex))

set @startIndex = @charIndex + 1
set @charIndex = charindex(',', @ItemIDList, @startIndex)
if @charIndex = 0 and @startIndex < (len(@ItemIDList) + 1)
set @charIndex = len(@ItemIDList) + 1
end

select * From MyDb..MyTable where ItemID in (select TmpItemID from #TmpItem)

Thanks
0

Author Comment

I've requested that this question be closed as follows:

Accepted answer: 0 points for Tpaul_10's comment #a39749175

for the following reason:

A
0

LVL 16

Expert Comment

In order to get this done you need to follow the below steps

Step 1: Create the below split function in your database

CREATE FUNCTION dbo.Split
(
@RowData nvarchar(2000),
@SplitOn nvarchar(5)
)
RETURNS @RtnValue table
(
Id int identity(1,1),
Data nvarchar(100)
)
AS
BEGIN
Declare @Cnt int
Set @Cnt = 1
DECLARE @index INT
SET @index = Charindex(@SplitOn,@RowData)
While (@index>0)
Begin
Insert Into @RtnValue (data)
Select
Data = ltrim(rtrim(Substring(@RowData,1,@index-1)))

Set @RowData = Substring(@RowData,@index+1,len(@RowData))
Set @Cnt = @Cnt + 1
SET @index = Charindex(@SplitOn,@RowData)
End

Insert Into @RtnValue (data)
Select Data = ltrim(rtrim(@RowData))

Return
END

Step 2: re-write your query as below

select * From MyDb..MyTable where ItemID in ( SELECT CAST(DATA as BIGINT) FROM dbo.split(@ItemIDList) )
0

LVL 16

Expert Comment

There is no proper reason why this guy wants to close this question, although now we provided him a better solution.

Can you please elaborate rather than simply typing A
0

Author Comment

As I have specified I found a way to get through this issue and I have posted my code as well and your comment came in after that.

I have tested my code and is working as I am expected and that was the reason I wanted to close it.

Thanks and sorry if there is any confusion
0

LVL 16

Expert Comment

Thats Ok, no problem O.
0

## Featured Post

### Suggested Solutions

c# code 19 56
SQL server 2008 SP4 29 31
Backup Job question 4 17
while loop in html mail format 5 32
Introduction SQL Server Integration Services can read XML files, that’s known by every BI developer.  (If you didn’t, don’t worry, I’m aiming this article at newcomers as well.) But how far can you go?  When does the XML Source component become …
In this article we will get to know that how can we recover deleted data if it happens accidently. We really can recover deleted rows if we know the time when data is deleted by using the transaction log.
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.
Viewers will learn how to use the SELECT statement in SQL to return specific rows and columns, with various degrees of sorting and limits in place.