如何在动态 SQL 中使用常见的 table 表达式
How to use common table expression in a dynamic SQL
我必须编写一个基于复杂查询的动态数据透视表,我想使用一个通用的 table 表达式来创建数据集,我必须在该数据集上构建数据透视表以将其保持在动态 sql 并编译
我的问题是我不知道我是否可以在 SET 中使用 CTE,我在其中包装我必须执行的动态 SQL。
让我们看看代码:
WITH DatiCTE AS
(
SELECT ...
)
SET @DynamicPivotQuery =
N'SELECT IdActivity, ' + @PivotSelectColumnNames + '
FROM DatiCTE
PIVOT(SUM(NumOfDays)
FOR Area IN (' + @PivotColumnNames + ')) AS PVTTable'
WHERE 1 = 1
EXEC sp_executesql @DynamicPivotQuery
这样我在 SET @DynamicPivotQuery =
附近得到一个错误
如果我用 SELECT 替换 SET,则编译存储过程,但如果我 运行 它,我得到:
Invalid object name 'DatiCTE'
将 CTE WITH DatiCTE AS
的定义移动到动态 sql 中,如下所示:
SET @DynamicPivotQuery =
N'WITH DatiCTE AS
(
SELECT ...
)
SELECT IdActivity, ' + @PivotSelectColumnNames + '
FROM DatiCTE
PIVOT(SUM(NumOfDays)
FOR Area IN (' + @PivotColumnNames + ')) AS PVTTable'
+ 'WHERE 1 = 1';
EXEC sp_executesql @DynamicPivotQuery;
现在我切换到临时 table:
SELECT ...
INTO @TempTable
SET @DynamicPivotQuery =
N'
SELECT IdActivity, ' + @PivotSelectColumnNames + '
FROM @TempTable
PIVOT(SUM(NumOfDays)
FOR Area IN (' + @PivotColumnNames + ')) AS PVTTable'
+ 'WHERE 1 = 1';
EXEC sp_executesql @DynamicPivotQuery;
但我对并发用户有一些疑问。我尝试 table 变量但不能用于动态 sql...
我必须编写一个基于复杂查询的动态数据透视表,我想使用一个通用的 table 表达式来创建数据集,我必须在该数据集上构建数据透视表以将其保持在动态 sql 并编译
我的问题是我不知道我是否可以在 SET 中使用 CTE,我在其中包装我必须执行的动态 SQL。
让我们看看代码:
WITH DatiCTE AS
(
SELECT ...
)
SET @DynamicPivotQuery =
N'SELECT IdActivity, ' + @PivotSelectColumnNames + '
FROM DatiCTE
PIVOT(SUM(NumOfDays)
FOR Area IN (' + @PivotColumnNames + ')) AS PVTTable'
WHERE 1 = 1
EXEC sp_executesql @DynamicPivotQuery
这样我在 SET @DynamicPivotQuery =
如果我用 SELECT 替换 SET,则编译存储过程,但如果我 运行 它,我得到:
Invalid object name 'DatiCTE'
将 CTE WITH DatiCTE AS
的定义移动到动态 sql 中,如下所示:
SET @DynamicPivotQuery =
N'WITH DatiCTE AS
(
SELECT ...
)
SELECT IdActivity, ' + @PivotSelectColumnNames + '
FROM DatiCTE
PIVOT(SUM(NumOfDays)
FOR Area IN (' + @PivotColumnNames + ')) AS PVTTable'
+ 'WHERE 1 = 1';
EXEC sp_executesql @DynamicPivotQuery;
现在我切换到临时 table:
SELECT ...
INTO @TempTable
SET @DynamicPivotQuery =
N'
SELECT IdActivity, ' + @PivotSelectColumnNames + '
FROM @TempTable
PIVOT(SUM(NumOfDays)
FOR Area IN (' + @PivotColumnNames + ')) AS PVTTable'
+ 'WHERE 1 = 1';
EXEC sp_executesql @DynamicPivotQuery;
但我对并发用户有一些疑问。我尝试 table 变量但不能用于动态 sql...