Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 动态查询上的SQL无效列错误_Sql Server_Dynamicquery - Fatal编程技术网

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时确定变量的设置时,它肯定会有所帮助。我有一个非常大的查询,在那里我放置了一堆检查点,这些检查点只打印当前的变量