【发布时间】:2014-10-12 01:19:15
【问题描述】:
我目前无法使以下工作正常进行。我有一个表,'tbl_View',存在于我的数据库中,它的行中保存了另一个表的列名(用户可以选择他们希望显示的特定列,他们的选择列表保留在这里)。
然后我想创建一个视图,该视图将只从目标表“AREG”中为每个用户提供特定的列选择,并且如果可能的话希望动态地这样做。
表样本 - AREG 列名:
ID |文本_1 |文本_2 |文本_3 | Text_4 等...
tbl_查看数据:
查看 ID | lbl值 |名称 |秀YN |排序
10 | EANPR |是否8 |真 | 80
10 | INSP_DATE|日期_1 |真 | 81
10 | KG_DATE |日期_2 |真 | 82
11 |生活 | Num_13 |真 | 35
11 |面积 |维度_1 |真 | 69
11 |长度 |维度_2 |真 | 70
11 | EANPR |是否8 |真 | 80
12 |旅游 |文本_1 |真 | 1
12 |溢出 |文本_2 |真 | 2
12 | SLOPE_PCT|文本_3 |真 | 3
14 |项目名称 |文本_1 |真 | 1
14 |项目描述 |文本_2 | 2
代码是:
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
--Get distinct values of the PIVOT Column
SELECT @ColumnName= ISNULL(@ColumnName + ',','') + QUOTENAME(fldName)
FROM (SELECT DISTINCT fldName FROM qry_ADet WHERE (Viewid=14)) AS fname
--Prepare the PIVOT query using the dynamic
SET @DynamicPivotQuery = N'SELECT ' + @ColumnName + ' FROM #AREG PIVOT ' + @ColumnName + ' AS PVTTable'
--Execute the Dynamic Pivot Query
EXEC sp_executesql @DynamicPivotQuery
我不断收到错误:
消息 102,第 15 级,状态 1,第 1 行
“Text_1”附近的语法不正确。
我已将视图 ID 硬编码到此示例的查询中,但将在我的最终查询中使用一个参数,因为它将被 asp.net 数据源引用。但如果更改 Viewid 子句,错误会指向不同的列名。
请帮忙。
谢谢
【问题讨论】:
-
如果您编辑问题以打印出
@DynamicPivotQUery,您可能会发现问题。pivot语法看起来不正确。 -
你需要
STUFF()和FOR XML PATH来连接你的列名 -
感谢您的提示。打印 DynamicPivot 查询后,我能够编辑我的代码以获得正确的结果。
标签: sql sql-server tsql dynamic pivot