Я пишу динамический c запрос на SQL Сервере и сталкиваюсь с проблемой, которой у меня никогда не было, синтаксис полностью правильный - я потратил часы, чтобы убедиться, что это так, но запрос все еще не дает правильную конструкцию в сводной секции, где выбранные столбцы не вводятся полностью, когда я проверяю запрос с помощью оператора печати. Кто-нибудь видел это раньше?
alter PROCEDURE [dbo].[spFinance_NegativePlugstest2]
@SnapshotPeriod VARCHAR(50) =NULL
, @Year INT
, @Aggs INT=1
AS
BEGIN
SET NOCOUNT ON;
DECLARE @owner AS NVARCHAR(MAX),
@ownermonths AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@SnapshotPeriod_Local AS VARCHAR(50)=@SnapshotPeriod
,@Year_Local INT =@Year,
@Aggs_Local INT =@Aggs;
IF @SnapshotPeriod_Local IS NULL
BEGIN
SELECT @SnapshotPeriod_Local= SnapshotPeriod
FROM vwFin_MainData c
WHERE IsCurrent=1
END
SET @owner = STUFF((SELECT DISTINCT ',' + QUOTENAME(c.FinancialOwner + '_Neg')
FROM vwFin_MainData c
WHERE [Year]=@Year_Local
AND SnapshotPeriod=@SnapshotPeriod_Local
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @ownermonths = STUFF((SELECT DISTINCT ',' + QUOTENAME(c.OwnerMonth)
FROM (SELECT FinancialOwner + '_' + [Month] AS OwnerMonth FROM
(SELECT FinancialOwner, Jan AS Jan_Neg, Feb AS Feb_Neg , Mar AS Mar_Neg , Apr AS Apr_Neg , May AS May_Neg , Jun AS Jun_Neg, Jul AS Jul_Neg, Aug AS Aug_Neg, Sep AS Sep_Neg , Oct AS Oct_Neg, Nov AS Nov_Neg, Dec AS Dec_Neg
FROM vwFin_MainData c
WHERE [Year]=@Year_Local
AND SnapshotPeriod=@SnapshotPeriod_Local) p
UNPIVOT
(Monthly FOR [Month] IN
([Jan_Neg], [Feb_Neg], [Mar_Neg], [Apr_Neg], [May_Neg], [Jun_Neg], [Jul_Neg], [Aug_Neg], [Sep_Neg], [Oct_Neg], [Nov_Neg], [Dec_Neg])
) AS unpvt
)c FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query ='; WITH _MainNegView AS (
SELECT
CASE WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=1 THEN [PCMID]
WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=2 THEN ''@Aggs''
END AS [PCMID]
, CASE WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=1 THEN [PCMNAME]
WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +') =2 THEN ''@Aggs''
END AS [PCMNAME]
,[Year]
,[Tier1Name]
,[TIER2NAME]
,[TIER3NAME]
,[PARENTPROJECTID]
,[PARENTPROJECTNAME]
,SUM(CASE WHEN [Jan] > 0
THEN 0
ELSE [Jan]
END) AS [Jan_Neg]
,SUM(CASE WHEN [Feb] > 0
THEN 0
ELSE Feb
END) AS [Feb_Neg]
,SUM(CASE WHEN [Mar] > 0
THEN 0
ELSE [Mar]
END) AS [Mar_Neg]
,SUM(CASE WHEN [Apr] > 0
THEN 0
ELSE [Apr]
END) AS [Apr_Neg]
,SUM(CASE WHEN [May] > 0
THEN 0
ELSE [May]
END) AS [May_Neg]
,SUM(CASE WHEN [Jun] > 0
THEN 0
ELSE [Jun]
END) AS [Jun_Neg]
,SUM(CASE WHEN [Jul] > 0
THEN 0
ELSE [Jul]
END) AS [Jul_Neg]
,SUM(CASE WHEN [Aug] > 0
THEN 0
ELSE [Aug]
END) AS [Aug_Neg]
,SUM(CASE WHEN [Sep] > 0
THEN 0
ELSE [Sep]
END) AS [Sep_Neg]
,SUM(CASE WHEN [Oct] > 0
THEN 0
ELSE [Oct]
END) AS [Oct_Neg]
,SUM(CASE WHEN [Nov] > 0
THEN 0
ELSE [Nov]
END) AS [Nov_Neg]
,SUM(CASE WHEN [Dec] > 0
THEN 0
ELSE [Dec]
END) AS [Dec_Neg]
, SUM(CASE WHEN [Jan] > 0 THEN 0 ELSE [Jan] END +
CASE WHEN [Feb] > 0 THEN 0 ELSE [Feb] END +
CASE WHEN [Mar] > 0 THEN 0 ELSE [Mar] END +
CASE WHEN [Apr] > 0 THEN 0 ELSE [Apr] END +
CASE WHEN [May] > 0 THEN 0 ELSE [May] END +
CASE WHEN [Jun] > 0 THEN 0 ELSE [Jun] END +
CASE WHEN [Jul] > 0 THEN 0 ELSE [Jul] END +
CASE WHEN [Aug] > 0 THEN 0 ELSE [Aug] END +
CASE WHEN [Sep] > 0 THEN 0 ELSE [Sep] END +
CASE WHEN [Oct] > 0 THEN 0 ELSE [Oct] END +
CASE WHEN [Nov] > 0 THEN 0 ELSE [Nov] END +
CASE WHEN [Dec] > 0 THEN 0 ELSE [Dec] END) AS [FYF_Neg]
,[ProgramLOB]
,[Theme]
,[Closed-Completed]
, LastMonthActuals
, CASE WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=1 THEN [ProjectLOB]
WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=2 THEN ''@Aggs''
END AS [ProjectLOB]
, CASE WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=1 THEN [ProjectLOBGroup]
WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=2 THEN ''@Aggs''
END AS [ProjectLOBGroup]
, FinancialOwner AS FinancialOwner
FROM [dbo].[vwFin_MainData]
WHERE [Year] IN ('+ CAST(@Year_Local AS VARCHAR) +')
AND SnapshotPeriod IN (''' +@SnapshotPeriod_Local+ ''')
GROUP BY
CASE WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=1 THEN [PCMID]
WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=2 THEN ''@Aggs''
END
, CASE WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=1 THEN [PCMNAME]
WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=2 THEN ''@Aggs''
END
,[Year]
,[Tier1Name]
,[TIER2NAME]
,[TIER3NAME]
,[PARENTPROJECTID]
,[PARENTPROJECTNAME]
,[ProgramLOB]
,[Theme]
,[Closed-Completed]
, LastMonthActuals
, CASE WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=1 THEN [ProjectLOB]
WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=2 THEN ''@Aggs''
END
, CASE WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=1 THEN [ProjectLOBGroup]
WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=2 THEN ''@Aggs''
END
, FinancialOwner
) , _UnpivotedView AS (
SELECT
[ID]
, FinancialOwner
, [Month]
, FinancialOwner + ''_'' + [Month] AS OwnerMonth
, Monthly
FROM
(SELECT
CASE WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=1 THEN [PCMID]
WHEN ('+ CAST(@Aggs_Local AS VARCHAR) +')=2 THEN [PARENTPROJECTID]
END AS [ID]
, FinancialOwner
, [Jan_Neg]
, [Feb_Neg]
, [Mar_Neg]
, [Apr_Neg]
, [May_Neg]
, [Jun_Neg]
, [Jul_Neg]
, [Aug_Neg]
, [Sep_Neg]
, [Oct_Neg]
, [Nov_Neg]
, [Dec_Neg]
FROM _MainNegView) p
UNPIVOT
(Monthly FOR [Month] IN
([Jan_Neg], [Feb_Neg], [Mar_Neg], [Apr_Neg], [May_Neg], [Jun_Neg], [Jul_Neg], [Aug_Neg], [Sep_Neg], [Oct_Neg], [Nov_Neg], [Dec_Neg])
) AS unpvt
SELECT
[ID]
,' + @ownermonths + ' FROM
(SELECT [ID]
,OwnerMonth
, Monthly
FROM _UnpivotedView
) BaseTable
PIVOT
(
SUM([Monthly])
FOR OwnerMonth in (' + @ownermonths + ')
)p '
print cast(@query as ntext)
--exec(@query)
END
GO