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

Пишу некоторый ETL пакет. В данном пакете необходимо получить результат примерно такого запроса:
select  T.Value, F.Value
from    dbo.T
        cross apply dbo.func(T.ID, @Parametr) F

В запросе при вызове функции dbo.func передается параметр @Parametr. Данный параметр есть пользовательская переменная, которая получается в самом начале ETL пакета(допустим это время его последнего выполнения) и применяется почти для всех запросов в пакете.

Вопрос вот в чем: как я могу удобно выполнить запрос выше ? Т.е. как передать Пользовательскую переменную в функцию. На просторах гугла нашел единственный метод - формировать строку через конкатенацию и её исполнять.

Может подскажете более удобный или правильный способ ?
7 окт 13, 23:07    [14936716]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметра в табличную функцию в SSIS(ETL)  [new]
Remind
Member

Откуда: UK
Сообщений: 523
Алекс1990,

http://technet.microsoft.com/en-us/library/ms140355.aspx
8 окт 13, 02:17    [14937120]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметра в табличную функцию в SSIS(ETL)  [new]
Алекс1990
Guest
Remind, спасибо! Данным решением можно замапить параметры на уровне Control flow, в то время как мне необходимо выполнять батч в Data Flow. Может еще есть идеи ?
8 окт 13, 09:24    [14937504]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметра в табличную функцию в SSIS(ETL)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
Алекс1990
мне необходимо выполнять батч в Data Flow
А что это значит? Этот батч в Data Flow - источник данных?
8 окт 13, 09:43    [14937599]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметра в табличную функцию в SSIS(ETL)  [new]
Алекс1990
Guest
alexeyvg, да, совершенно верно. В данный момент записан в "Ole DB Source". Прошу прощения за ужасную терминологию )

Как вариант вроде можно записать пакеты в процедуры. Но больно много таких процедур будет(штук 70).
8 окт 13, 09:55    [14937671]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметра в табличную функцию в SSIS(ETL)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
Алекс1990
Remind, спасибо! Данным решением можно замапить параметры на уровне Control flow, в то время как мне необходимо выполнять батч в Data Flow.

да, совершенно верно. В данный момент записан в "Ole DB Source"
Когда вы делаете запрос в источнике Ole DB Source, пишете вместо параметра знак ?
select  T.Value, F.Value
from    dbo.T
        cross apply dbo.func(T.ID, ?) F
Потом нажимаете кнопку Parameters справа, и привязываете этот ? к переменной пакета.
8 окт 13, 10:31    [14937840]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметра в табличную функцию в SSIS(ETL)  [new]
ssis
Guest
есть один "хак", делаешь sql command from variable, изначально в переменную записываешь какой-либо нормально парсящийся запрос с параметром, который имеет такой-же резалтсет, что и функция. Например

select 
cast(null as int) as filed1
, cast(null as varchar(20)) as filed2
...
where 
cast(1 as int) = ?

а затем, в процессе выполнения пакета, подменяешь текст запроса в переменной на нужный
8 окт 13, 10:32    [14937851]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметра в табличную функцию в SSIS(ETL)  [new]
ssis
Guest
alexeyvg
Алекс1990
Remind, спасибо! Данным решением можно замапить параметры на уровне Control flow, в то время как мне необходимо выполнять батч в Data Flow.

да, совершенно верно. В данный момент записан в "Ole DB Source"
Когда вы делаете запрос в источнике Ole DB Source, пишете вместо параметра знак ?
select  T.Value, F.Value
from    dbo.T
        cross apply dbo.func(T.ID, ?) F
Потом нажимаете кнопку Parameters справа, и привязываете этот ? к переменной пакета.

а в какой версии ssis у вас это работает?
в 2008 r2, вот такой запрос не прасится

select *
from sys.dm_db_index_physical_stats(DB_ID(), ?, 1, Null, 'detailed')
8 окт 13, 10:35    [14937874]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметра в табличную функцию в SSIS(ETL)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
ssis
а в какой версии ssis у вас это работает?
в 2008 r2, вот такой запрос не прасится
Да, всё правильно, там слишком ограниченные возможности парса запросов (WTF??? Почему бы просто не подставить что мне нужно вместо знака вопроса?)

Придётся выбирать вариант "текст запроса из переменной" в Ole DB Source, и перед этим таском правильно её формировать...

Или использовать хак, про который вы написали.
8 окт 13, 10:42    [14937929]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметра в табличную функцию в SSIS(ETL)  [new]
ssis
Guest
alexeyvg
Да, всё правильно, там слишком ограниченные возможности парса запросов (WTF??? Почему бы просто не подставить что мне нужно вместо знака вопроса?)


жаль, я думал он (SSIS) поумнел
8 окт 13, 10:48    [14937973]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметра в табличную функцию в SSIS(ETL)  [new]
Remind
Member

Откуда: UK
Сообщений: 523
ssis
а в какой версии ssis у вас это работает?
в 2008 r2, вот такой запрос не прасится

select *
from sys.dm_db_index_physical_stats(DB_ID(), ?, 1, Null, 'detailed')

Попробуйте вот так:
select *
from sys.dm_db_index_physical_stats(DB_ID(), :param, 1, Null, 'detailed')

При маппинге параметра и переменной, название параметра нужно естественно указывать без ":"
8 окт 13, 16:20    [14940598]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметра в табличную функцию в SSIS(ETL)  [new]
ssis
Guest
Remind
ssis
а в какой версии ssis у вас это работает?
в 2008 r2, вот такой запрос не прасится

select *
from sys.dm_db_index_physical_stats(DB_ID(), ?, 1, Null, 'detailed')

Попробуйте вот так:
select *
from sys.dm_db_index_physical_stats(DB_ID(), :param, 1, Null, 'detailed')

При маппинге параметра и переменной, название параметра нужно естественно указывать без ":"

у вас получается?
у меня нет

К сообщению приложен файл. Размер - 64Kb
8 окт 13, 16:28    [14940653]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметра в табличную функцию в SSIS(ETL)  [new]
Алекс1990
Guest
Да не у кого не получается. Гугл в помощь - даже на оф ресурсах одинаковые советы - через конкатенацию в строку или процедурами.
8 окт 13, 16:50    [14940798]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметра в табличную функцию в SSIS(ETL)  [new]
Remind
Member

Откуда: UK
Сообщений: 523
Да, прошу прощения. Проблема именно с подстановкой параметра в функцию.
8 окт 13, 16:52    [14940807]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить