Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
Ситуация сложилась такая, очень прошу помощи: 1) Для построение отчетов, я использую SQL Server Reporting Services - это компонент Microsoft Visual Studio 2005. 2) В этой среде в качестве входных параметров, при формировании отчета, можно выбрать такой параметр как: multi-value. Этот параметр предоставляет возможность выбирать не один (sign) параметр, а несколько, из списка возможных. На экране это выглядит как выпадающий список с несколькими заданными заранее значениями (значения эти могут быть любого типа: string, integer и тд). Записывается он в переменную, какого типа я сама не понимаю, но содержит он данные (тип данных указывается при объявлении этого multi параметра), которые мы выбираем из выпадающего списка - через запятую. То есть если я выбираю из выпадающего списка значения типа integer: 1 2 3 4 5, то выглядеть они будут так: 1,2,3,4,5 (интересно какой тип эта переменная будет иметь?) 3) При выборе такого вот параметра при выполнении отчета, и использовании его в дальнейшем в SQL скрипте возникает одна большая проблемма, заключается она в следущем: этот параметр, невозможно использовать нигде, кроме как в конструкции ESLECT в разделе WHERE ..... IN(multi-value). А мне необходимо передавать этот multi параметр в процедуру!!! Распарсить этот параметр никак не удается, потому что любые функции работы со строковыми переменными нещадно ругаются на разделитель типа запятая, из за чего в функцию передается не один параметр в качестве просматриваемой строки, а целых 5 (исходя из вышеописанной ситуации в пункте 2). Преобразовать явно в тип varchar тоже нельзя. Единственный выход который я нашла, заключается в использовании динамического SQL и выполнении sp_executesql внутри процедуры. Но теперь, к сожалению по незнанию, не могу написать грамотно тело процедуры с использованием sp_executesql, хочу я получить следующее: создаю процедуру: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. в этой процедуре параметр @ParamAll - не играет особой роли, а вот @ParamCaseID и является этим загадочным параметром, который невозможно передать в эту процедуру из за того что он выбран множественно! Все что я смогла написать и удачно выполнить было следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Может кто-то сталкивался с подобной ситуацие, ведь существует же такой параметр как multi-value а работать то как с ним, удобный но ни к чему не прикладываемый?? Помогите пожалйста :), ведь вопрос уже больше по SQL чем по репортинг сервису. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 13:55 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
А зачем в этом случае Вы создаете процедуру? Помоему multi-value параметр в этом запросе и без процедуры прекрасно отработает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 14:38 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
Дело в том, что у заказчика требование, все запросы к SQL Server должны выполняться только посредством хранимых процедур! К сожалению ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 15:52 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
BOLWriting Queries that Map to Multivalued Report Parameters You can define a multivalued parameter for any report parameter that you create. However, if you want to pass multiple parameter values back to a query, the following requirements must be satisfied: * The data source must be SQL Server, Oracle, or Analysis Services. * The data source cannot be a stored procedure. Reporting Services does not support passing a multivalued parameter array to a stored procedure. * The query must use an IN clause to specify the parameter ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 16:15 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
Спасибо огромное, дуреха не заметила этого в BOL! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 16:25 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
pr0ger BOL... * The data source cannot be a stored procedure. Reporting Services does not support passing a multivalued parameter array to a stored procedure. ... But you still can do it yourself if stored procedures the only way to go : Массивы и Списки в SQL Server ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 16:28 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
BugsBunny pr0ger BOL... * The data source cannot be a stored procedure. Reporting Services does not support passing a multivalued parameter array to a stored procedure. ... But you still can do it yourself if stored procedures the only way to go : Массивы и Списки в SQL Server Более проблематично третье условие The query must use an IN clause to specify the parameter ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 16:32 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
В смысле более проблематично? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 16:40 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
Где взять IN в параметрах хранимой процедуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 16:42 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
2 pr0ger : What I meant was "If you start using sp - you are on your own and no more restriction like mentioned "The query must use an IN clause to specify the parameter" are applied". So, it was just a link to the knowledge "How to be on one's own with multivalued parameters". As per reporting services, it's exactly what they do: just replace "multivalued" parameter in the query with "union all" subquery - the same dynamic SQL byverka used. No doubt that it will be quite tricky to do the same with stored procedure (especially if it's encrypted) :) By the way, Oracle's row-level security did exactly the same (on engine level, of course) : replaced "row-level security"-enabled table with corresponding view in all stemenets. Side-effects: sounds great but good for small tables only. (disclaimer: my knowledge of Oracle is theoretical only) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 16:54 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
Вот что получилось: В процедуру передается строка с параметрами через запятую, процедура их обрабатывает как описано в вышепреведенной статье В отчете Dataset выглядит примерно так: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 17:26 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
pr0gerВот что получилось: В процедуру передается строка с параметрами через запятую, процедура их обрабатывает как описано в вышепреведенной статье "Reporting Service"-compatible wrapper - really neat idea of using RS "pre-processor" to handle multivalued parameters. Can it handle following approach (picked up from some third-party reporting tool)? 1. load multivalued parameters into "parameters" table 2. use "parameters" table inside stored procedure filtering output with "inner join" 3. clean up Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 18:14 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
pr0gerВот что получилось: В процедуру передается строка с параметрами через запятую, процедура их обрабатывает как описано в вышепреведенной статье В отчете Dataset выглядит примерно так: Код: plaintext 1. 2. В вышеприведенной статье, описана функция, в которую передается переменная типа ntext, а у меня вообще непонятно какого типа переменная, причем еще и не распарсеная. Проблемма у меня именно в этом, как передать этот параметр в функцию?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 18:22 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
byverkaВ вышеприведенной статье, описана функция, в которую передается переменная типа ntext, а у меня вообще непонятно какого типа переменная, причем еще и не распарсеная. Проблемма у меня именно в этом, как передать этот параметр в функцию?? ntext просто содержит значиния любого типа. А сама функция уже должна знать как правильно сделать convert. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 19:36 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
Игорь Оробчук byverkaВ вышеприведенной статье, описана функция, в которую передается переменная типа ntext, а у меня вообще непонятно какого типа переменная, причем еще и не распарсеная. Проблемма у меня именно в этом, как передать этот параметр в функцию?? ntext просто содержит значиния любого типа. А сама функция уже должна знать как правильно сделать convert. Не получается, делаю так: Создаю в своей базе функцию - duo_text_split_me(@list ntext, @delim nchar(1) = N',') - точно так же как описано в статье! в самом дата сете пишу следующее: select * from duo_text_split_me(@ParamCaseID,DEFAULT) - что бы просто посмотреть, схватит ли функция этот параметр. Делаю Preview отчета, выдается следующая ошибка: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 19:48 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
Эта функция используется для преобразования строки вида 'param1, param2, param3' в табличный вид, т.е. она должна использоваться уже в процедуре, а не в датасете. Для преобразования multivalue-параметра в строку можно использовать способ, который я описал ранее. Или сделать, как описал BugsBunny, с помощью вспомогательной таблицы с параметрами, это более производительный и более масштабируемый способ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 21:18 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
byverka...Делаю Preview отчета, выдается следующая ошибка: Код: plaintext Can you run profiler to see what statement(s) are sent to the server by tracing SQL:Batch Starting or/and SQL:Statement Starting events? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 22:57 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
Ребят, всем спасибо огромное, но все равно без SELECT а здесь никак не обойтись, то есть что бы хоть как-то распарсить параметр multi. Потом получилась такая картина: 1) Создала процедуру: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Далее идем в мой дата сет, вот как он выглядит: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Ругаеться: Код: plaintext Причем ругается именно уже при выполнении тела процедуры LastSettlement_Case (я проверяла, саму переменную @res я выводила в этом дата сете без проблемм). Никак не могу понять почему, сама процедура, вне дата сета отлично работает, но правда только в том случае, если входной параментр указывается в следующем виде: Код: plaintext Да, хотела отметить важный момент - поле CaseID в таблице TL_Case - типа int! Из за этого у меня все проблеммы! Все остальное не проходит, в общем сложно, а в profiler не могу посмотреть какой параметр передается в процедуру, не могу найти в настройках profiler то событие, которое бы выводил бы значение передаваемого в процедуру параметра. Может быть подскажете как это событие в profiler называется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 17:19 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
Did you try method suggested by pr0ger? I think it should work. It seems like Microsoft just wrap your select query into dynamic sql by replacing @multivalue with "1,2,3" (without quotes) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 17:44 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
BugsBunnyDid you try method suggested by pr0ger? I think it should work. It seems like Microsoft just wrap your select query into dynamic sql by replacing @multivalue with "1,2,3" (without quotes) В каком именно вызове я должна использовать параметр @multivalue без кавычек?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 18:00 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
Дело все лишь в том, что все запросы к серверу должны быть обернуты в хранимые процедуры, в моем случае это сделать никак не получается, по крайней мере последний вариант моей процедуры и дата сета - не работают, если честно я не знаю почему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 18:03 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
Сам недавно столкнулся с такой проблемой. Решил по "рабоче-крестьянски". В запросе (DataSet) передаю в процедуру параметр типа varchar. Например, @MultiValueString. Сам параметр не декларируется в запросе. RS designer при этом создает параметр отчета MultiValueString. Делаем его скрытым (hiden) и присваиваем ему дефолтое значение через функцию Join(...), которая выпрямляет выбранные значения множественного параметра в одну строку c указанным разделителем. И все. Естественно, в процедуре используется динамический запрос (exec sp_executesql @cmd). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 18:04 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
а без динамического SQL? что-то вроде: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 18:08 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
pr0gerа без динамического SQL? что-то вроде: Сори, у меня еще и динамический источник данных (таблицы разные). Токо из-за этого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 18:11 |
|
||
|
Использование sp_executesql в SQL Server Reporting Services
|
|||
|---|---|---|---|
|
#18+
to byverka: I didn't get it - did you tried this: create procedure for your working version of dynamic sql: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. in report Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 18:22 |
|
||
|
|

start [/forum/search_topic.php?author=Tantos&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 442ms |
| total: | 599ms |

| 0 / 0 |
