I have this query:
DECLARE @holdIds VARCHAR(MAX)
SET @holdIds = '1,2,3'
DECLARE @flagNames NVARCHAR(MAX);
SELECT
@flagNames = COALESCE(@flagNames + ',', '') + FlagName
FROM
BurnHoldStatus
WHERE
BurnHoldStatusID in (@holdIds);
SELECT @flagNames AS FlagName;
In this example the variable '@holdIds' has values '1,2,3' but could have just one value '1'.
When I run the query, an error appears:
Msg 245, Level 16, State 1, Line 6
Conversion failed when converting the varchar value '1,2,3' to data type int.
I try convert the value of '@holdIds' but not work.
Any idea?
Thanks.
[UPDATE]
I found the answer:
DECLARE @holdIds NVARCHAR(MAX);
SET @holdIds = '1,2,3';
DECLARE @holdIdList TABLE(id INT);
INSERT INTO @holdIdList
SELECT * FROM Split(@holdIds, ',');
DECLARE @flagNames NVARCHAR(MAX);
SELECT
@flagNames = COALESCE(@flagNames + ',', '') + FlagName
FROM
BurnHoldStatus, @holdIdList h
WHERE
BurnHoldStatusID = h.id;
SELECT @flagNames AS FlagName;
In this code I use an function 'Split' to split a string passing the divisor (i.e: ',').
Split function code:
ALTER FUNCTION [dbo].[Split]
(
@RowData nvarchar(MAX),
@SplitOn nvarchar(MAX)
)
RETURNS @RtnValue table
(
Data nvarchar(MAX)
)
AS
BEGIN
Declare @Cnt int
Set @Cnt = 1
While (Charindex(@SplitOn,@RowData)>0)
Begin
Insert Into @RtnValue (data)
Select
Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))
Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))
Set @Cnt = @Cnt + 1
End
Insert Into @RtnValue (data)
Select Data = ltrim(rtrim(@RowData))
Return
END
Thanks for Vercelli by show other post.
Thanks guys :)