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即使我同时运行整个代码也没有声明的错误.这个问题很可能在我所说的枢轴声明中并没有真正找到问题.有任何想法吗?
使用#临时表,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)
您应该在动态查询中使用表变量。
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)