can't contibute variables together like V1 = V1 + V2

I want to contribute 2 variables into 1 variable.
pls. hav a look at the boold lines.
what i'm doing wrong?

DECLARE groupid CURSOR FOR select groupid from #Product_Pool_2
OPEN groupid
FETCH NEXT FROM groupid into @groupid
print N'Groupid'+ @groupid
            print N'Mgroesse'+ @mgroesse;
      DECLARE groessen CURSOR FOR SELECT       REPLACE(product_Prices.ProductID, product_Definitions.GroupID, '') AS ASGroesse
                  FROM product_Prices INNER JOIN  product_Definitions ON product_Prices.ProductID = product_Definitions.ProductID
                  WHERE product_Prices.ModelID = 1 AND product_Definitions.GroupID = @groupid

      OPEN groessen
      FETCH NEXT FROM groessen into @groesse
            select  @mgroesse =   N'@' + CAST(@groesse AS varchar(15)) ;
            set @mtest = convert(varchar(50),@mtest,102) + N'@'+ @groesse
            print N'Mgroesse '+ @mgroesse;
            print  N'groesse '+ @groesse;
            print  N'test '+ @mtest;

            FETCH NEXT FROM groessen into @groesse
      CLOSE groessen
      DEALLOCATE groessen
FETCH NEXT FROM groupid into @groupid

CLOSE groupid
Who is Participating?
ste5anConnect With a Mentor Senior DeveloperCommented:
You need to normalized your data. Then it's a simple FOR XML PATH(), e.g.

DECLARE @Groups TABLE ( GroupID INT );

VALUES  ( 2591 );

      ProductID NVARCHAR(255)

INSERT  INTO @Products
VALUES  ( '2591-16' ),
        ( '2591-17' ),
        ( '2591-18' );

WITH    Normalized
          AS ( SELECT   PARSENAME(REPLACE(P.ProductID, '-', '.'), 2) AS GroupID ,
                        PARSENAME(REPLACE(P.ProductID, '-', '.'), 1) AS SizeID
               FROM     @Products P
               WHERE    PARSENAME(REPLACE(P.ProductID, '-', '.'), 2) IN ( SELECT    G.GroupID
                                                                          FROM      @Groups G )
    SELECT  O.GroupID ,
            ( SELECT    '@-' + I.SizeID
              FROM      Normalized I
              WHERE     I.GroupID = O.GroupID
			  FOR XML PATH('')
            ) AS Sizes
    FROM    Normalized O
    GROUP BY O.GroupID;

Open in new window

btw, I don't like your terminology. Different sizes don't make a different product, only a different product variants. A group is a more general thing like a category.
Mike EghtebasDatabase and Application DeveloperCommented:
set @mtest = convert(varchar(50),@mtest,102) + N'@'+ @groesse

You may have to convert @groesse to the same data type explicitly.
ebertsysAuthor Commented:
i change it to

            set @mtest = convert(varchar(50),@mtest,102) + N'@'+ convert(varchar(50),@groesse,102)
same result empty string
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

ste5anSenior DeveloperCommented:
Of what data type are product_Prices.ProductID and product_Definitions.GroupID? Seems like they are (N)VARCHAR and your trying to strip off the group ID which seems to be part of the product ID. Which would be a violation of 1NF (atomic values).

But then, why do you need to cast it in the inner loop?

Please post a consise and complete example with table DDL and sample data INSERT statements.

And last but not least: It looks like row value concatention. In this case you can use FOR XML PATH(''). Maybe this is sufficient:

SELECT	'@'	+ REPLACE(PP2.ProductID, PD.GroupID, '') 
FROM	#Product_Pool_2 PP
	INNER JOIN product_Definitions PD ON PD.GroupID = PP.groupid
	INNER JOIN product_Prices PP2 ON PP2.ProductID = PD.ProductID
WHERE	PP2.ModelID = 1 

Open in new window

I fully agree with ste5an, please supply sample data and expected result.

nb: If you need an nvarchar outcome, then all parts should be nvarchar (i.e. don't cast to varchar, cast to nvarchar)
Mike EghtebasDatabase and Application DeveloperCommented:
Yes, the following line are mixed type data:

 set @mtest = convert(varchar(50),@mtest,102) + N'@'+ convert(varchar(50),@groesse,102)


 set @mtest = convert(nvarchar(50),@mtest,102) + N'@'+ convert(nvarchar(50),@groesse,102)
Alpesh PatelAssistant ConsultantCommented:
select  @mgroesse =   N'@' + CAST(@groesse AS varchar(15)) ;
set @mtest = convert(varchar(50),@mtest,102) + N'@'+ @groesse

To set variable to second one you have to execute this statements. Otherwise values are not assigned to next variable.
Mike EghtebasDatabase and Application DeveloperCommented:
The way that I see,

convert(varchar(50),@mtest,102)     <-- this being varchar implicitly would take '@' as varchr

This means, there is no need for N'@'

and the same will happen to  @groesse.

But there will be overhead for this. Why don't we explicitly have:

convert(varchar(50),@mtest,102) + '@'+ convert(varchar(50),@groesse,102)


convert(nvarchar(50),@mtest,102) + N'@'+ convert(nvarchar(50),@groesse,102)

Depending what data type is required at the end.

ebertsysAuthor Commented:
i did both.
convert(varchar(50),@mtest,102) + '@'+ convert(varchar(50),@groesse,102)
convert(nvarchar(50),@mtest,102) + N'@'+ convert(nvarchar(50),@groesse,102

emptey result!
i get a 50% proper result when i do
set @mtest = '@' + @groesse
i get :
groesse = @L
groesse = @x and so on.

but when i set
set @mtest = @mtest + '@' + @groesse -  the result is emptey
ebertsysAuthor Commented:
the sizes are a part of the productid like
[productid=[Groupid]+[size] that the productid in the following sample is 2591-16; 2591-17;2591-18

Mgroesse @-16
Mgroesse @-17
Mgroesse @-18
Mgroesse @-19
Mgroesse @-20
Mgroesse @-21
Mgroesse @-22
Mgroesse @-23
what i need is


so that i have 1 row with the groupid and the sizes in one field
ebertsysAuthor Commented:
that what i'm looking for
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.