Skip to content
Advertisement

Updating SQL Variable

I’m attempting to create a variable that will hold a value, which I will then later use to select from a table using the variable value. This works perfectly the first time around, but any time I try and change the parameters to update the variable it returns blank. Am I able to use the same variable with different parameters? Or am I doing something wrong with my code?

Like I said, this method words great for 1 time and then afterward if I Print the variable then it returns blank.

Here is an example of my variable working as expected.

DECLARE @ReportTitle as VARCHAR(100)

SELECT @ReportTitle = ti.Title
            FROM dbo.tblSales ti 
            WHERE ti.Title = (SELECT REPLACE(T1.Title, 'Sale', '')
                    FROM dbo.tblSales t1
                    WHERE t1.IdCountry = 34 
                    AND t1.IdReport = 3375
                    AND t1.IdLanguage= 1
                    and t1.btInUse = 1
            )


PRINT @ReportTitle

SELECT      i.IdCountry as Country,
            i.Title as ReportTitle,
            i.Report as IndustryID

FROM dbo.tblSales i
WHERE       i.IdCountry = 49
            AND i.IdLanguag = 1
            and i.btInUse = 1
            AND i.Title LIKE '%' + @ReportTitle +'%'

Now If I run the same exact query but change AND t1.IdReport = 3375 to AND t1.IdReport = 3595 the print @ReportTitle returns empty and the query I have written does not return any rows.

Here is an example of one that is not working:

DECLARE @ReportTitle as VARCHAR(100)

SELECT @ReportTitle = ti.Title
            FROM dbo.tblSales ti 
            WHERE ti.Title = (SELECT REPLACE(T1.Title, 'Sale', '')
                    FROM dbo.tblSales t1
                    WHERE t1.IdCountry = 34 
                    AND t1.IdReport = 3375
                    AND t1.IdLanguage= 1
                    and t1.btInUse = 1
            )


PRINT @ReportTitle

SELECT      i.IdCountry as Country,
            i.Title as ReportTitle,
            i.Report as IndustryID

FROM dbo.tblSales i
WHERE       i.IdCountry = 49
            AND i.IdLanguag = 1
            and i.btInUse = 1
            AND i.Title LIKE '%' + @ReportTitle +'%'

My expected outcome is to use the variable to hold titles based on the IdReport I pass.

For example, the first time around the variable prints Retail which is what I am expecting, I then search for titles that includes %Retail%

Second time around I run the query using IdReport = 3595 which returns the title Appointments. Which if I print @ReportTitle it equals nothing when I expect it to equal Appointments

Advertisement

Answer

Was able to figure it out. It wasn’t a data issue so it was a bit tricky. Turns I may have had an extra SELECT that wasn’t needed.

Here is a code sample of working code for me:

DECLARE @ReportTitle as VARCHAR(100)

    (SELECT  @ReportTitle = REPLACE(T1.Title, 'Sale', '')
            FROM    dbo.tblSales ti 
            WHERE   t1.IdCountry = 34 
            AND     t1.IdReport = 214
            AND     t1.IdLanguage= 1
            and     t1.btInUse = 1
)

SELECT      i.IdCountry as Country,
            i.Title as ReportTitle,
            i.Report as IndustryID

FROM        dbo.tblSales i
WHERE       i.IdCountry = 21
            AND i.IdLanguag = 1
            and i.btInUse = 1
            AND i.Title LIKE '%' + @ReportTitle +'%'
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement