Sql server 动态查询上的SQL无效列错误
我有以下疑问:Sql server 动态查询上的SQL无效列错误,sql-server,dynamicquery,Sql Server,Dynamicquery,我有以下疑问: DECLARE @DynamicPivotQuery AS NVARCHAR(MAX) DECLARE @ColumnName AS NVARCHAR(MAX) SELECT @ColumnName = ISNULL(@ColumnName + ',','') + QUOTENAME(MaxDate) FROM (SELECT DISTINCT MaxDate FROM CustPeriodTable) AS MaxDates SET @DynamicPivotQuery =
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
SELECT @ColumnName = ISNULL(@ColumnName + ',','') + QUOTENAME(MaxDate)
FROM (SELECT DISTINCT MaxDate FROM CustPeriodTable) AS MaxDates
SET @DynamicPivotQuery =
N'SELECT ' + @ColumnName + ' AS Test, min(rn)
FROM CustPeriodTable '
EXEC sp_executesql @DynamicPivotQuery
@ColumnName中的每个条目都出现无效列名错误。我正在设置一个更复杂的查询,该查询将涉及一个pivot,但我正在尝试首先让这个块工作。有人能指出这个问题可能来自哪里吗?对于这些类型的问题,您需要了解动态查询是什么。选择它而不是执行它
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
SELECT @ColumnName = ISNULL(@ColumnName + ',','') + QUOTENAME(MaxDate)
FROM (SELECT DISTINCT MaxDate FROM CustPeriodTable) AS MaxDates
SET @DynamicPivotQuery =
N'SELECT ' + @ColumnName + ' AS Test, min(rn)
FROM CustPeriodTable '
SELECT @DynamicPivotQuery
-- EXEC sp_executesql @DynamicPivotQuery
从这里您应该能够确定问题是什么。对于这些类型的问题,您需要了解动态查询是什么。选择它而不是执行它
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
SELECT @ColumnName = ISNULL(@ColumnName + ',','') + QUOTENAME(MaxDate)
FROM (SELECT DISTINCT MaxDate FROM CustPeriodTable) AS MaxDates
SET @DynamicPivotQuery =
N'SELECT ' + @ColumnName + ' AS Test, min(rn)
FROM CustPeriodTable '
SELECT @DynamicPivotQuery
-- EXEC sp_executesql @DynamicPivotQuery
您应该可以从这里确定问题所在。
选择[2014-01-24]作为测试。
?是否有以日期命名的字段?是的,每列都有日期,然后是这些日期的数据。这有什么不对吗?嗯,生成一个数据透视表是一回事,这些列是动态构建的。使用这些字段名创建一个实际的表是另一回事。动态字段名称几乎从来都不是一个好主意。选择[2014-01-24]作为测试
?是否有以日期命名的字段?是的,每列都有日期,然后是这些日期的数据。这有什么不对吗?嗯,生成一个数据透视表是一回事,这些列是动态构建的。使用这些字段名创建一个实际的表是另一回事。动态字段名称几乎从来都不是一个好主意。谢谢,这至少帮助我想象发生了什么,我不知道你能做到这一点,谢谢@没问题。当您需要在执行动态sql时确定变量的设置时,它肯定会有所帮助。我有一个非常大的查询,在那里我放置了一堆检查点,这些检查点只会打印当前的变量。其他的选择是使用联合检查。谢谢,这至少帮助我可视化了正在发生的事情。我不知道你可以这样做,谢谢@没问题。当您需要在执行动态sql时确定变量的设置时,它肯定会有所帮助。我有一个非常大的查询,在那里我放置了一堆检查点,这些检查点只打印当前的变量