Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема в SSIS  [new]
Garich2011
Member

Откуда:
Сообщений: 1
Доброго вечера.
Стоит задача перенести DTS пакет в SSIS.
В sours dts пакета стот sql выражение с параметрами и несколькими темповами таблица.
Как я начал реализовавать это в ssis.
Создал SQl Execite Task:
ResultSet: XML
Конекшн: OLE DB
SQLSourseType: direct imput
SQlStatmen: мое sql выражение:


SET NOCOUNT ON

IF OBJECT_ID('tempdb..#Period', 'U') IS NOT NULL
DROP TABLE #Period

select *
into #Period
from Period

IF OBJECT_ID('tempdb..#PeriodId', 'U') IS NOT NULL
DROP TABLE #PeriodId

SELECT PeriodId
INTO #PeriodId
FROM #Period
WHERE PeriodId = ?

IF OBJECT_ID('tempdb..#ICCustomerNew', 'U') IS NOT NULL
DROP TABLE #ICCustomerNew

SELECT i.*
INTO #ICCustomerNew
FROM ICCustomer i, #PeriodId p
WHERE i.PeriodId=p.PeriodId

IF (SELECT COUNT(*) FROM #ICCustomerNew) <= 2000
BEGIN
RAISERROR(N'Записей в ICCustomer за заданный период <= 2000!', 16, 1)
RETURN
END

CREATE CLUSTERED INDEX #ICCustomerNew_ind_0 ON #ICCustomerNew (CustomerId)

select p.PeriodId, a.organization_id, a.org_code, a.org_name, ICId = isnull(b.ICId, 1), a.salesman_code,
a.customer_type, a.report_org_id, a.bu_id, a.budget_category, a.sale_office, a.collection_manager_code, a.inn, a.region_code,
a.vip, a.service_manager, a.id_example, a.org_group, CustomerIdOld=NULL, a.id_customer,a.jur_status,a.id_macrocust,j.operator_type,
a.legal_status, o.country_group,j.service_level,a.contract_type,j.customer_size
from organizations a
inner join #PeriodId p on (1=1)
left join oksm o
on (a.country_code=o.country_code)
left join customers j
on (a.id_customer = j.id_customer)
left join #ICCustomerNew b
on (a.organization_id = b.CustomerId)
where a.id_example not in (1, 101,201) ----AND organization_id < 1000000
--order by a.organization_id
OPTION (FORCE ORDER)


Далее создал две глобальные переменные, одну(RecordSet: String, это переменной присвоил значение "select Null As PeriodId, Nyll As organization_id, NUll As org_code т.д. основного селекта, чтобы в дальнейшем можно было замапить в Data Flow") на вывод результатов sql выражения, другую это входящий параметр "Where PeriodId = ?"

Далее в Объекте Data Flow, в Ole Db Sourse выставил значение поля Data Access Mode "Sql Command from variable"

Запуская пакет и получаю на контейнере SQl Execute Task вот такую ошибку:

SSIS package "CustomerBUFInsert.dtsx" starting.
Information: 0x4004300A at Data Flow Task, DTS.Pipeline: Validation phase is beginning.
Error: 0xC002F210 at Execute SQL Task, Execute SQL Task: Executing the query "бла бла бла, мое sql выражение выше" failed with the following error: "An invalid character was found in text content.
". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
Task failed: Execute SQL Task
Warning: 0x80019002 at CustomerBUFInsert: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. The Execution method succeeded, but the number of errors raised (1) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
SSIS package "CustomerBUFInsert.dtsx" finished: Failure.

В чем может быть ошибка?
Может есть другой способ передать выше указанный select в Data Flow
2 июн 11, 17:57    [10754877]     Ответить | Цитировать Сообщить модератору
 Re: Проблема в SSIS  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Garich2011
Стоит задача перенести DTS пакет в SSIS.

В sours dts пакета стот sql выражение с параметрами и несколькими темповами таблица.
Как я начал реализовавать это в ssis.
Создал SQl Execite Task:
ResultSet: XML
Конекшн: OLE DB
SQLSourseType: direct imput
SQlStatmen: мое sql выражение:
SET NOCOUNT ON 

IF OBJECT_ID('tempdb..#Period', 'U') IS NOT NULL
	DROP TABLE #Period

select *
into #Period
from Period

IF OBJECT_ID('tempdb..#PeriodId', 'U') IS NOT NULL
	DROP TABLE #PeriodId

SELECT PeriodId
 INTO  #PeriodId
 FROM  #Period
 WHERE PeriodId = ?

IF OBJECT_ID('tempdb..#ICCustomerNew', 'U') IS NOT NULL
	DROP TABLE #ICCustomerNew

SELECT i.*
INTO  #ICCustomerNew
FROM  ICCustomer i, #PeriodId p
WHERE i.PeriodId=p.PeriodId

IF (SELECT COUNT(*) FROM #ICCustomerNew) <= 2000
BEGIN
	RAISERROR(N'Записей в ICCustomer за заданный период <= 2000!', 16, 1)
	RETURN
END

CREATE CLUSTERED INDEX #ICCustomerNew_ind_0 ON #ICCustomerNew (CustomerId)

select p.PeriodId, a.organization_id, a.org_code, a.org_name, ICId = isnull(b.ICId, 1), a.salesman_code, 
       a.customer_type, a.report_org_id, a.bu_id, a.budget_category, a.sale_office, a.collection_manager_code, a.inn, a.region_code,
       a.vip, a.service_manager, a.id_example, a.org_group, CustomerIdOld=NULL, a.id_customer,a.jur_status,a.id_macrocust,j.operator_type,
       a.legal_status, o.country_group,j.service_level,a.contract_type,j.customer_size  
  from organizations a
  inner join #PeriodId p on (1=1)
  left join oksm o
       on (a.country_code=o.country_code)
  left join customers j
       on (a.id_customer = j.id_customer)
  left join #ICCustomerNew b
       on (a.organization_id = b.CustomerId) 
where a.id_example not in (1, 101,201)  ----AND organization_id < 1000000
--order by a.organization_id
OPTION (FORCE ORDER)

Далее создал две глобальные переменные:
  • одну(RecordSet: String, это переменной присвоил значение "select Null As PeriodId, Nyll As organization_id, NUll As org_code т.д. основного селекта, чтобы в дальнейшем можно было замапить в Data Flow") на вывод результатов sql выражения,
  • другую это входящий параметр "Where PeriodId = ?"

    Далее в Объекте Data Flow, в Ole Db Sourse выставил значение поля Data Access Mode "Sql Command from variable"

    Запуская пакет и получаю на контейнере SQl Execute Task вот такую ошибку:

    SSIS package "CustomerBUFInsert.dtsx" starting.
    Information: 0x4004300A at Data Flow Task, DTS.Pipeline: Validation phase is beginning.
    Error: 0xC002F210 at Execute SQL Task, Execute SQL Task: Executing the query "бла бла бла, мое sql выражение выше" failed with the following error: "An invalid character was found in text content.
    ". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
    Task failed: Execute SQL Task
    Warning: 0x80019002 at CustomerBUFInsert: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. The Execution method succeeded, but the number of errors raised (1) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
    SSIS package "CustomerBUFInsert.dtsx" finished: Failure.

    В чем может быть ошибка?
    Может есть другой способ передать выше указанный select в Data Flow

  • Garich2011
    Стоит задача перенести DTS пакет в SSIS.
    Мыши, кактус и всё такое.
    2 июн 11, 20:39    [10755657]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить