如何调试动态透视代码中的错误?



>我有这个:

DECLARE 
@columns NVARCHAR(MAX) = '',
@sql NVARCHAR(MAX) = '';
SELECT @columns += QUOTENAME(CAST(ondate as date)) + ','
FROM AuditLogUnique
WHERE CAST(ondate as date) >= '06/22/2020'
ORDER BY CAST(ondate as date)
SET @columns = LEFT(@columns, LEN(@columns) - 1);
SET @sql = '
SELECT * FROM   
(
SELECT systemuserid, COUNT(systemuserid) FROM [AuditLogUnique]
WHERE CAST(ondate as date) >= ''06/22/2020''
GROUP BY systemuserid
) t
PIVOT(
COUNT(systemuserid) 
FOR CAST(ondate as date) IN ('+ @columns +')
) AS pivot_table;';
EXECUTE sp_executesql @sql;

它失败,"("附近的语法不正确。

这是我第一次尝试使用 PIVOT,但不确定如何调试它。

谢谢。

只需在执行动态 SQL 之前添加打印,您就可以通过单独运行代码来找出错误。

以下几点可能会有所帮助:

在准备@columns时应使用distinct,否则在后面的部分可能会失败。

在旋转之前,也可以在选择中使用ondate

不要在pivot内部使用cast,而是使@columns类似于原始ondate列。

最新更新