构建了一个查询,它基本上查看包含所有银行假期的表格,然后查看当前财政年度的每个月,然后告诉我可以工作多少个工作日减去银行业务和周末。例如,这个月有21个。还有一个累积的文件,基本上每个月加起来,所以4月到2月的累计将会增加所有这些日子。
在查询中有一个CreateTable #DATA,它在最后被删除,这在Management Studio中正常工作并正确运行。
我的问题是我正在做一个SSIS工作并将我的查询保存为SQL文件并使用“浏览”按钮选择它。它不允许我继续,因为我认为它有临时表的问题(见截图)
有关如何在保持功能的同时使其工作的任何建议?
请参阅代码以供参考:
DECLARE @StartDate DATETIME,
@EndDate DATETIME
SELECT @StartDate = (select
case when month(getdate()) >= 4 then
convert(datetime, cast(year(getdate()) as varchar) + '-4-1')
else
convert(datetime, cast(year(getdate())-1 as varchar) + '-4-1')
end),
@EndDate = (select
case when month(getdate()) < 4 then
convert(datetime, cast(year(getdate()) as varchar) + '-3-31')
else
convert(datetime, cast(year(getdate())+1 as varchar) + '-3-31')
end)
CREATE TABLE #data
(
firstday DATETIME NOT NULL PRIMARY KEY,
workingdays INT NOT NULL
);
WITH dayscte ([Date])
AS (SELECT @StartDate
UNION ALL
SELECT Dateadd(DAY, 1, [Date])
FROM dayscte
WHERE [Date] <= @Enddate)
INSERT INTO #data
SELECT MIN([Date]),
COUNT(*) [Day]
FROM table2
LEFT JOIN [dbo].[mydb].[mytable1]
ON [Date] BETWEEN [dbo].[mydb].[mytable1].startdate AND [dbo].[mydb].[mytable1].enddate
where
NOT EXISTS (
SELECT field1,field2 FROM [dbo].[mydb].[mytable1].tscheme_cal WHERE
dayid ='0234572347854234'
AND
[date] <= startdate
AND
[date] >= enddate
)
AND Datename(weekday, [Date]) NOT IN ( 'Saturday', 'Sunday' )
GROUP BY Datepart(MONTH, [Date]),
Datepart(YEAR, [Date])
OPTION (MAXRECURSION 366)
DECLARE @Date DATETIME
SET @Date = (SELECT MIN(firstday)
FROM #data)
SELECT Period,
workingdays [Days_Available] ,
year (firstday) AS [Year]
FROM (SELECT Datename(MONTH, firstday) [Period],
workingdays,
0 [SortField],
firstday
FROM #data
UNION
SELECT Datename(MONTH, @Date) + ' - ' + Datename(MONTH, firstday),
(SELECT SUM(workingdays)
FROM #data b
WHERE b.firstday <= a.firstday) [WorkingDays],
1 [SortField],
firstday
FROM #data a
WHERE
firstday > @Date) data
ORDER BY sortfield,
firstday
DROP TABLE #data
答案 0 :(得分:1)
在SSIS上处理临时表并不容易。 我建议这篇文章:
http://www.sqllike.com/using-temporary-tables-with-ssis.html
这是一个解决方案,但我不喜欢它。 我有时会使用表变量或在DB上创建常规表,然后将其放在最后。
答案 1 :(得分:1)
在SSIS中,我发现表变量运行良好。如果它是转换的源代码,即使在存储过程中也不能使用临时表。
答案 2 :(得分:0)
在SQL Server 2012中,如果使用临时表,则必须指定结果集。
这是SSIS用于返回输出元数据的sp_describe_first_result_set过程的问题。
E.g。
EXEC dbo.RptResults_StoredProcedure
变为
EXEC dbo.RptResults_StoredProcedure
WITH RESULT SETS
((
Date NVARCHAR(10),
Location VARCHAR(12),
Department CHAR(1),
Shift CHAR(1),
ForecastSales DECIMAL(18,2),
ActualSales DECIMAL(18,2)
))
有关详细信息,请参阅