Задание SSIS, включая SQL, который создает временную таблицу - PullRequest
0 голосов
/ 29 февраля 2012

Составил запрос, который в основном просматривает таблицу, которая содержит все банковские праздники, а затем просматривает каждый месяц для текущего финансового года, а затем сообщает мне, сколько рабочих дней доступно для работы за вычетом банковских и выходных дней.Например, в этом месяце их 21. Существует также совокупное поле, которое в основном складывается каждый месяц, поэтому совокупное число за апрель-февраль будет содержать все эти дни.

В запросе есть 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  

enter image description here

Ответы [ 3 ]

1 голос
/ 29 февраля 2012

В SSIS я считаю, что табличные переменные работают хорошо.Вы не можете использовать временные таблицы даже в хранимых процессах, если это исходный код для преобразования.

1 голос
/ 29 февраля 2012

не так просто работать с временными таблицами в SSIS.Я предлагаю эту статью:

http://www.sqllike.com/using-temporary-tables-with-ssis.html

это решение, но оно мне не нравится.Иногда я использую табличные переменные или создаю обычную таблицу в БД, а затем в конце отбрасываю ее.

0 голосов
/ 14 января 2015

В SQL Server 2012, если вы используете временные таблицы, вы должны указать набор результатов.

Эта проблема связана с процедурой sp_describe_first_result_set, которую SSIS использует для возврата выходных метаданных.

* 1005 Е.Г. *

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)
))

Для получения дополнительной информации

http://blog.concentra.co.uk/2014/08/22/column-metadata-determined-correctly-ssis-data-flow-task-stored-procedure-inputs/

http://blog.concentra.co.uk/2014/08/22/column-metadata-determined-correctly-ssis-data-flow-task-stored-procedure-inputs/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...