我目前无法让以下工作。我有一个表,' tbl_View',存在于我的数据库中,其行中包含另一个表的列名(用户可以选择他们希望显示的特定列及其选择列表保留在这里。)
然后,我想要创建一个视图,该视图只会为目标表中的每个用户提供特定的列选择' AREG'如果可能的话,我想动态地这样做。
表格样本 - AREG列名称:
ID | Text_1 | Text_2 | Text_3 | Text_4等...
tbl_View数据:
ViewID | lblValue | fldName | showYN | sOrder
10 | EANPR |是号8真的80
10 | INSP_DATE | Date_1 |真的81
10 | KG_DATE | Date_2 |真的82
11 |生活| Num_13 |真的35
11 |区域| Dimension_1 |真的69
11 |长度| Dimension_2 |真的70
11 | EANPR |是号8真的80
12 |旅行| Text_1 |真的1
12 | SPILLLVE | Text_2 |真的2
12 | SLOPE_PCT | Text_3 |真的3
14 | Project_Name | Text_1 |真的1
14 |项目描述| Text_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
我一直收到错误:
Msg 102,Level 15,State 1,Line 1
Text_1'附近的语法不正确。
我已将视图ID硬编码到此示例的查询中,但在最终查询中将使用参数,因为它将由asp.net数据源引用。但是,如果更改了Viewid子句,则错误指向不同的列名。
请帮忙。
由于
答案 0 :(得分:0)
评论太久了,我认为问题可能源于列连接,它需要这样的东西:
SET @ColumnName = STUFF((SELECT distinct ',' + QUOTENAME(fldName)
FROM qry_ADet
WHERE (Viewid=14)
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
答案 1 :(得分:0)
调试动态sql查询,在执行之前执行PRINT语句。
您可能会看到错误来自@DynamicPivotQuery - 你应该从tbl_View而不是#AREG中选择对吗? - 您的枢轴声明错误。它应该像
FROM sometable
PIVOT
(
sum( somecol)
for anothercol in ( [value1], [value2] , [value3] )
) p