У меня есть функция таблицы, которая содержит некоторые таблицы CTE, которые в конечном итоге сворачиваются к возвращаемому выражению select. В одной из таблиц CTE я использую @variable. Это тот же @variable, который я объявляю для функции. Когда я пытаюсь сохранить функцию, я получаю эту ошибку:cte tsql using переменная
Lookup Error - SQL Server Database Error: Parameters were not supplied for the function 'forecast_baseline'.
Есть ли проблема с использованием @variable внутри таблицы КТР? Я могу предоставить код, но, похоже, он не передаёт функцию @variable в таблицу CTE, поэтому компилятору это не нравится.
ALTER function [eo].[forecast_baseline] (@monthkey as char(6))
returns @results table(
[billing_date] date,
[year] int,
[type] varchar(max),
[dollars] float,
[units] float,
[CC] int,
[offering] varchar(max),
[IntegratedReleasePlanNm] varchar(max),
[ProjectId] varchar(max),
[ProjectNm] varchar(max),
[ModelEstimateId] varchar(max),
[query] varchar(max),
[ItemGroupId] varchar(max),
CashflowType varchar(12),
plotdate datetime
)
as
begin
declare @StartTime datetime = (SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(getdate())-1),getdate()),101))
declare @EndTime datetime = DATEADD(year, +5, @StartTime)
declare @Interval int = 1;
WITH yearsinmonths (
[datetimemonth],
[enddatetimemonth]) AS (
SELECT
@StartTime datetimemonth,
DATEADD(month, @Interval, @StartTime) AS enddatetimemonth
UNION ALL
SELECT
EndRange,
DATEADD(month, @Interval, enddatetimemonth)
FROM
cSequence
WHERE
DATEADD(month, @Interval, enddatetimemonth) < @EndTime
),
forecast_baseline (
[billing_date],
[year],
[type],
[dollars],
[units],
[CC],
[offering],
[IntegratedReleasePlanNm],
[ProjectId],
[ProjectNm],
[ModelEstimateId],
[query],
[ItemGroupId],
[CashflowType]) as (
select
dateadd(month,-1,convert(date, a.CHARGE_MONTH+'01', 112))
,year(dateadd(month,-1,convert(date, a.CHARGE_MONTH+'01', 112)))
,'Baseline'
,sum(cast(a.CHARGE_AMOUNT as money))
,sum(cast (PPGUNITS as float))
,ORG_CC
,[offering]
,'Baseline'
,'baseline'
,'baseline'
,'baseline'
,'baseline'
,'N/A'
,'N/A'
from
[sources].[feeds].[MARS2IEO_MARS_BD12_INV_LOB_EXTRACTS] a join sources.[md].[MARS_ITEMID_MAPPING] b
on a.offering=b.itemid
where
host_name is not null
and (a.org_sort_code like ('KBBFA%') or
a.org_sort_code like ('KBBFB%') or
a.org_sort_code like ('KBBDD%'))
and b.category in ('server','disk','tape')
and cast(year(dateadd(month,-1,convert(date, a.CHARGE_MONTH+'01', 112))) as char(4)) + RIGHT('00' + CONVERT(VARCHAR,month(dateadd(month,-1,convert(date, a.CHARGE_MONTH+'01', 112)))), 2) <= @monthkey -- this is the line that throws the error
group by
offering
,ORG_CC
,dateadd(month,-1,convert(date, a.CHARGE_MONTH+'01', 112))
,year(dateadd(month,-1,convert(date, a.CHARGE_MONTH+'01', 112)))
)
INSERT INTO @results (
[billing_date],
[year],
[type],
[dollars],
[units],
[CC],
[offering],
[IntegratedReleasePlanNm],
[ProjectId],
[ProjectNm],
[ModelEstimateId],
[query],
[ItemGroupId],
[CashflowType]
)
select
*
from
forecast_baseline
INSERT INTO @results (
[billing_date],
[year],
[type],
[dollars],
[units],
[CC],
[offering],
[IntegratedReleasePlanNm],
[ProjectId],
[ProjectNm],
[ModelEstimateId],
[query],
[ItemGroupId],
CashflowType
)
SELECT
b.datetimemonth
,year([billing_date])
,'Baseline'
,[dollars]
,[units]
,CC
,[offering]
,'Baseline'
,'projected'
,'projected'
,'projected'
,'projected'
,'N/A'
,'N/A'
FROM
forecast_baseline a inner join yearsinmonths b
on cast(year([billing_date]) as char(4))+ RIGHT('00' + CONVERT(VARCHAR,month([billing_date])), 2) = @monthkey
and b.datetimemonth > [billing_date]
return
end
Да, укажите код –
добавленный код. проблема заключается в ** прогнозе_бассейн ** cte. он ищет параметр, который не распознает параметр @monthkey в качестве параметра. Я должен иметь переменную там, потому что таблица, из которой этот cte тянет, слишком велика, чтобы загрузить все это. производительность будет бак. –