必须声明表变量"@myTable"

Tom*_*end 4 t-sql sql-server

DECLARE @myTable TABLE( 
Name VARCHAR(50), 
Year INT, 
Hours INT ) 

INSERT INTO @myTable *.... some values*

DECLARE @var INT 
SET @var = 2015

DECLARE @DynamicPivot VARCHAR(MAX) 

SET @DynamicPivot = 'SELECT * FROM
@myTable  PIVOT( SUM(Hours) FOR Year IN (' + @var + ') ) AS PvtTable

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

我正在尝试创建一个动态表并使用pivot旋转表.@var中的值是动态表中已存在的值Year INT.一切正常,除非我尝试执行动态数据透视.它给了我@myTable即使我同时运行整个代码也没有声明的错误.这个问题很可能在我所说的枢轴声明中并没有真正找到问题.有任何想法吗?

gof*_*fr1 5

使用#临时表,sp_executesql仅适用于nvarchar:

CREATE TABLE #myTable ( 
    Name VARCHAR(50), 
    Year INT, 
    Hours INT
) 

INSERT INTO #myTable *.... some values*

DECLARE @var INT 
SET @var = 2015

DECLARE @DynamicPivot NVARCHAR(MAX) 

SET @DynamicPivot = '
SELECT * 
FROM #myTable
PIVOT( 
SUM(Hours) FOR Year IN ([' + CAST(@var as nvarchar(10)) + '])
) AS PvtTable'

EXEC sp_executesql @DynamicPivot

DROP TABLE #myTable
Run Code Online (Sandbox Code Playgroud)


Shi*_*aji 5

您应该在动态查询中使用表变量。

DECLARE @DynamicPivot VARCHAR(MAX) 

SET @DynamicPivot = '
DECLARE @myTable TABLE( 
Name VARCHAR(50), 
Year INT, 
Hours INT ) 

INSERT INTO @myTable *.... some values*

DECLARE @var INT 
SET @var = 2015

SELECT * FROM
@myTable  PIVOT( SUM(Hours) FOR Year IN (' + @var + ') ) AS PvtTable'

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