首页 > 解决方案 > 设置新变量时未识别声明的变量

问题描述

我正在尝试使用分配给初始@period 变量的值编写一个 SET 查询,但该变量在 SET 中未被识别。我怎样才能使我只需要申报一次?

当我在 SET 中声明 @period 时,会显示正确的输出。但是,我需要在顶部有一个单独的 @period 声明,它可以与多个 SET 一起使用。

DECLARE @period VARCHAR(15) = '01/01/2018'
SET @SQL = 'SELECT col1, col2, right(@period,4) + left(@period,2)
            FROM table' 
print(@SQL)
exec(@SQL)

错误:必须声明标量变量“@period”。

需要输出

标签: sqlsql-servertsql

解决方案


您需要使用动态 SQL。我会推荐:

DECLARE @period VARCHAR(15) = '01/01/2018';

SET @SQL = N'SELECT col1, col2, right(@period,4) + left(@period,2)
            FROM table' ;

print(@SQL)

exec sp_executesql @sql, '@period varchar(15)', @period=@period;

确保将@sql其声明为NVARCHAR().


推荐阅读