Solved

Conversion failed when converting the varchar value to data type int.

Posted on 2009-04-01
4
352 Views
Last Modified: 2012-05-06
I have a web application that defines the list of order numbers that I want to update in a DB. This list of order numbers (which is defined as int in the DB) is collected in a string. I would like to pass the value of this string to the sql parameter to update the DB, but when I run it I get the error message: "Conversion failed when converting the varchar value ''44','45'' to data type int."

This code below represents the situation:
declare @OrderSelection varchar(max)
set @OrderSelection = '''44'',''45'''
update SY1_OrderDetail set OrderLineStatus = 1
where orderNumber in (@OrderSelection)

Please, could you help me to solve the problem?
declare @OrderSelection varchar(max)

set @OrderSelection = '''44'',''45'''

update SY1_OrderDetail set OrderLineStatus = 1

where orderNumber in (@OrderSelection)

Open in new window

0
Comment
Question by:EdsSystem
  • 2
4 Comments
 
LVL 37

Expert Comment

by:momi_sabag
Comment Utility
that won't work
is this a one time thing or do you need to run this in a  procedure>?
0
 

Author Comment

by:EdsSystem
Comment Utility
I will use it in a procedure.
0
 
LVL 39

Accepted Solution

by:
BrandonGalderisi earned 500 total points
Comment Utility
You have to put it in dynamic SQL in order to pass @OrderSelection in like that.  Or, use a UDF to split the @OrderSelection into a table and join to it or us in/exists.

Here's the function I wrote to do it:
http://sqlservernation.com/blogs/howtos/archive/2009/03/07/converting-a-delimited-string-into-a-table.aspx



--with dynamic sql

declare @OrderSelection varchar(max)

set @OrderSelection = '44,45'
 

exec('update SY1_OrderDetail set OrderLineStatus = 1 where orderNumber in (' + @OrderSelection + ')')
 
 

--with function 1

declare @OrderSelection varchar(max)

set @OrderSelection = '44,45'
 

update SY1_OrderDetail set OrderLineStatus = 1 where orderNumber in

(select cast(theValue as int) from dbo.fn_delimitedToString(@OrderSelection,','))
 

--with function 2

declare @OrderSelection varchar(max)

set @OrderSelection = '44,45'
 

update sy 

set OrderLineStatus = 1 

from SY1_OrderDetail sy

where exists

(select 1 from dbo.fn_delimitedToString(@OrderSelection,',') where cast(theValue as int) = sy.OrderNumber)

Open in new window

0
 

Author Closing Comment

by:EdsSystem
Comment Utility
Thanks a lot for your prompt response!!!
0

Featured Post

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

Having an SQL database can be a big investment for a small company. Hardware, setup and of course, the price of software all add up to a big bill that some companies may not be able to absorb.  Luckily, there is a free version SQL Express, but does …
Use this article to create a batch file to backup a Microsoft SQL Server database to a Windows folder.  The folder can be on the local hard drive or on a network share.  This batch file will query the SQL server to get the current date & time and wi…
Via a live example combined with referencing Books Online, show some of the information that can be extracted from the Catalog Views in SQL Server.
Viewers will learn how to use the UPDATE and DELETE statements to change or remove existing data from their tables. Make a table: Update a specific column given a specific row using the UPDATE statement: Remove a set of values using the DELETE s…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

7 Experts available now in Live!

Get 1:1 Help Now