Dynamic safe statement

Last updated:

Warning: Review and test in a non-production environment before running.

Back to results

-- Adapted from demo scripts by Kimberly L. Tripp, SQLskills – https://www.sqlskills.com/blogs/kimberly/

DECLARE @ExecStr    NVARCHAR (4000),
                  @MemberNo    INT = 64567;

SELECT @ExecStr =
    N'SELECT [mbr].* 
    FROM [dbo].[member] AS [mbr] 
    WHERE [mbr].[member_no] = ' 
        + CONVERT (NVARCHAR (10), @MemberNo); 
EXEC (@ExecStr);
GO

Every time we run the batch with different values the sql engine will decide
The type of the value. This will generate different statements in the cache.

DECLARE @ExecStr    NVARCHAR (4000),
                  @MemberNo    INT = 64567;

SELECT @ExecStr = 
    N'SELECT [m].* 
    FROM [dbo].[member] AS [m] 
    WHERE [m].[member_no] = CONVERT (INT, ' 
        + CONVERT (NVARCHAR (10), @MemberNo) + N')';

EXEC (@ExecStr);
GO

EXEC [QuickCheckOnCache] '%member_no%';
GO

But, when we explicit convert back to column type we generate only one statement in cache.