To add a local variable value to a dynamic query result set

The*_*der 1 sql-server dynamicquery

I have a dynamic query where in I want to add the value of a local variable to every row of the result set. I have a simplified version of the example below.

While this query works fine:

DECLARE @purchaseDate AS DATE
SET @purchaseDate = '12/23/2020'

SELECT Name, @purchaseDate 
FROM Fruits
Run Code Online (Sandbox Code Playgroud)

The similar one in dynamic SQL does not work:

DECLARE @query AS NVARCHAR(MAX),
        @purchaseDate AS DATE

SET @purchaseDate = '12/23/2020'

SET @query = 'SELECT Name, @purchaseDate FROM Fruits' 

EXEC sp_executesql @query
Run Code Online (Sandbox Code Playgroud)

I get the error

Must declare the scalar variable "@purchaseDate".

So I assumed I might need to declare my purchaseDate inside the query as the dynamic SQL query cannot access the variable. So I tried this:

DECLARE @query AS NVARCHAR(MAX)

SET @query = 'DECLARE @purchaseDate AS DATE' +
             'SET @purchaseDate = ' + '12/23/2020 ' +
             'SELECT Name, @purchaseDate FROM Fruits' 

EXEC  sp_executesql @query
Run Code Online (Sandbox Code Playgroud)

But I get the same error message.

How do I go about fixing it?

Lar*_*rnu 6

You can't reference a variable declared outside of a dynamic statement inside a dynamic statement. You need to add the declaration in the parameters and pass the value:

DECLARE @query  AS nvarchar(MAX),
        @purchaseDate AS date;
SET @purchaseDate = '20201223';
SET @query = 'SELECT Name,@purchaseDate FROM Fruits;'; 
EXEC sp_executesql @query, N'@purchaseDate date', @purchaseDate = @purchaseDate;
Run Code Online (Sandbox Code Playgroud)