Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Хранимые функции в датасетах SSRS2005 / 5 сообщений из 5, страница 1 из 1
30.07.2008, 16:16
    #35460883
Ghola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые функции в датасетах SSRS2005
Скажите пожалуйста, существует ли возможность обращаться в датасетах Reporting Services к хранимым функциям T-SQL иначе чем через текстовый(TEXT) запрос с оператором SELECT ?

Есть ли вообще преимущество у хранимых пользовательских функций (UDF) перед процедурами при использовании в запросах на выборку для отчетов? Я всегда считал что есть. Но сейчас, когда не встретил нормальной поддержки функций в SSRS, меня вдруг посетили сомнения. Т.е. получается MS как-бы гнобит функции?

Поддержка вызова хранимых функций есть например в ADO (более старом продукте). И она документирована в MSDN. А для SSRS - нет. Странно...
...
Рейтинг: 0 / 0
30.07.2008, 20:10
    #35461488
Хранимые функции в датасетах SSRS2005
Хм... Вы уверенны что вам нужны именно "хранимые функции" (UDF), а не хранимые процедуры (Stored Procedures)?
В RS-е есть возможность вызывать sp. В свойствах датасета на первой закладке Query усть возможность выбрать Command Type - Text или StoredProcedure...
Если всё же имеется ввиду некий особый механизм вызова функций (UDF) без использования оператора SELECT, то просвятите, плиз, как это сделать...
В SQL запросе есть два вырианта вызова UDF-ий:
для скалярных (Scalar-valued)
Код: plaintext
SELECT dbo.fnMyFunc( 123 )
для табличных (Table-valued)
Код: plaintext
SELECT * FROM dbo.fnMyFunc( 123 )
Знаете ещё какие-то варианты вызова?
...
Рейтинг: 0 / 0
31.07.2008, 08:53
    #35461904
Ghola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые функции в датасетах SSRS2005
Max Otto fon ShtirlicХм... Вы уверенны что вам нужны именно "хранимые функции" (UDF), а не хранимые процедуры (Stored Procedures)?
В RS-е есть возможность вызывать sp. В свойствах датасета на первой закладке Query усть возможность выбрать Command Type - Text или StoredProcedure...
Если всё же имеется ввиду некий особый механизм вызова функций (UDF) без использования оператора SELECT, то просвятите, плиз, как это сделать...
В SQL запросе есть два вырианта вызова UDF-ий:
для скалярных (Scalar-valued)
Код: plaintext
SELECT dbo.fnMyFunc( 123 )
для табличных (Table-valued)
Код: plaintext
SELECT * FROM dbo.fnMyFunc( 123 )
Знаете ещё какие-то варианты вызова?

Мне нужны именно "хранимые функции", потому что они более оптимальны, чем хранимые процедуры для вызова в отчетах. Во всяком случае я так думаю.
Насчет вызова UDF через SQL-команду SELECT - вопросов нет (Command Type - Text). Просто вызов хранимых процедур в SSRS оптимизирован специальным образом (Command Type - StoredProcedure), а функций - нет! Или я об этом не знаю. Вот это я, собственно, и хотел выяснить.

Например в ADO хранимые функции можно вызывать через механизм вызова хранимых процедур
Код: plaintext
1.
.CommandText = "dbo.fntMyFunc"
.CommandType = adCmdStoredProc" 
А аналогичной возможности в SSRS - как будто нет. И это уже заставляет предполагать всякое нехорошее. :)
...
Рейтинг: 0 / 0
31.07.2008, 10:39
    #35462157
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые функции в датасетах SSRS2005
ИМХО

Нет потребности "оптимизировать" вызов функции в датасетах SSRS
так же как это сделано для хранимых процедур.

Почему:

- вызов ХП выполянется командой exec, а вызов функции в классической запросе
- набор записей ХП нельзя join-ить с другими запросами, функцию можно
- ХП нельзя поставить в where условие, функцию можно
и т.д. и т.п.

Если "оптимизировать" вызов функций в датасетах - это ограничить сами возможности
использования функций по сравнению с ХП.

P.S. Под словом "нельзя" для ХП я имел ввиду стандартную конструкцию select...from...
...
Рейтинг: 0 / 0
31.07.2008, 11:20
    #35462382
Ghola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые функции в датасетах SSRS2005
incoldИМХО

Нет потребности "оптимизировать" вызов функции в датасетах SSRS
так же как это сделано для хранимых процедур.

Почему:

- вызов ХП выполянется командой exec, а вызов функции в классической запросе
- набор записей ХП нельзя join-ить с другими запросами, функцию можно
- ХП нельзя поставить в where условие, функцию можно
и т.д. и т.п.

Если "оптимизировать" вызов функций в датасетах - это ограничить сами возможности
использования функций по сравнению с ХП.

P.S. Под словом "нельзя" для ХП я имел ввиду стандартную конструкцию select...from...
Ну в общем-то все сложные запросы и join'ы я делаю внутри тела функции, вызываемой в датасете отчета. Чего и всем желаю :)

Но Вы практически правы.

Путем изучения лога SQL Profiler, я обнаружил, что текстовые команды (SELECT ...) прописанные в датасетах SSRS и содержащие параметры, транслируются в вызов RPC примерно такого вида:
Код: plaintext
1.
exec sp_executesql N'SELECT * 
FROM dbo.fntMyFunc(@P1, N''1151 1153 1155 1157'')', N'@P1 datetime', 'Jul 30 2008 12:00:00:000AM'
Т.е. в вызов хранимой процедуры sp_executesql. В точности так же, как это делает ADO для функций, вызываемых с
Код: plaintext
.CommandType = adCmdStoredProc
...
Рейтинг: 0 / 0
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Хранимые функции в датасетах SSRS2005 / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]