Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Reporting Service- ошибка
|
|||
|---|---|---|---|
|
#18+
SQL Server 2005 Reporting Service В конструкторе отчета - в окне где указывается строка запроса - указываю вызов хранимой процедуры : EXEC nameProc @p1,@p2,@p3 Выдается: ошибка There is an error in the query. Implicit conversion from data type sql_variant to nvarchar is not allowed. Use the CONVERT function to run this query. В процедуре nameProc есть вызов моих функций. Нигде нет sql_variant Почему ошибка ? Если запустить эту же хранимую процедуру отдельно - через Managmen Studio c параметрами - все работает. Я эту хранимую процедуру давно отладил - работает при вызове из клиентской программе на VB. А в Reporting Service - нет. В чем дело ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2008, 15:38 |
|
||
|
Reporting Service- ошибка
|
|||
|---|---|---|---|
|
#18+
Пробовал указать Command type - "StoredProcedure" и никаких EXEC? Просто имя и параметры? Ты смотрел на эту тему в MSDN? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2008, 16:59 |
|
||
|
Reporting Service- ошибка
|
|||
|---|---|---|---|
|
#18+
Видел на форуме похожий вопрос Причина в том, что в хранимой проц используется вывод во временную таблицу #tmp А остальное все правильно. Как решить вопрос - не нашел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2008, 07:09 |
|
||
|
Reporting Service- ошибка
|
|||
|---|---|---|---|
|
#18+
Я с подобным сталкивался. Решил так. 1 Закоментировал код всей процедуры. 2 Добавил в процедуру команду SELECT со структурой, которая в исходном коде. 3 Делаешь отчет. 4 Потом процедуру возвращаешь к нужному виду - у меня так сработало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2008, 09:02 |
|
||
|
Reporting Service- ошибка
|
|||
|---|---|---|---|
|
#18+
alm2Видел на форуме похожий вопрос Причина в том, что в хранимой проц используется вывод во временную таблицу #tmp А остальное все правильно. Как решить вопрос - не нашел Ребята, а вместо временной таблицы, табличная переменная не прокатит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2008, 17:32 |
|
||
|
Reporting Service- ошибка
|
|||
|---|---|---|---|
|
#18+
Да можно и временную таблицу, просто сделай как я описал, как бы обмани дизайнер отчетов сначала, а потом верни свой код в процедуру и все работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2008, 01:52 |
|
||
|
Reporting Service- ошибка
|
|||
|---|---|---|---|
|
#18+
Дикий БиллЯ с подобным сталкивался. Решил так. 1 Закоментировал код всей процедуры. 2 Добавил в процедуру команду SELECT со структурой, которая в исходном коде. 3 Делаешь отчет. 4 Потом процедуру возвращаешь к нужному виду - у меня так сработало А настройка параметров - как ? В хранимой процедуре комментируете все или кроме ее Начала ? Это оставить ? ----------------------------------- set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [dbo].[stat_kniga] @kotdStart nvarchar(2), @kotdStop nvarchar(2), @dSTART smalldatetime , @dSTOP smalldatetime, @KodMedService int, @uslSDCMedService int AS ---------------------------------------------------------- Остальное закомментировать и вставить Select 000 as fld1 ... БЕЗ ПАРАМЕТРОВ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2008, 08:07 |
|
||
|
Reporting Service- ошибка
|
|||
|---|---|---|---|
|
#18+
параметры все оставить, какие должны быть. Просто в теле процедуры все закоментировать. Вставить толкьо селект возвращающий результат с нужными полями (как в настоящем коде). Это только на время первых шагов создания отчета. Потом возвращаешь старый код и все продолжает работать, по крайней мере у меня так сработало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2008, 09:04 |
|
||
|
Reporting Service- ошибка
|
|||
|---|---|---|---|
|
#18+
Дикий Биллпараметры все оставить, какие должны быть. Просто в теле процедуры все закоментировать. Вставить толкьо селект возвращающий результат с нужными полями (как в настоящем коде). Это только на время первых шагов создания отчета. Потом возвращаешь старый код и все продолжает работать, по крайней мере у меня так сработало. СПАСИБО - У МЕНЯ ТО ЖЕ ЗАРАБОТАЛО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2008, 10:09 |
|
||
|
Reporting Service- ошибка
|
|||
|---|---|---|---|
|
#18+
Зачем вообще использовать хранимые процедуры для отчётов? Они необходимы только для внесения изменений в данные внутри таблиц. Для получения параметризованных выборок (т.е. селектов), которые собственно и нужны для отчётов - лучше использовать хранимые табличные функции. Они "легче". А внутри этих функций, для хранения промежуточных данных, например выбранных из курсора, вместо временных таблиц - табличные переменные. Они тоже "легче". Это всё работает начиная с SQL2000. См. также топик: не берутся данные из временной таблицы(Stor.Proc для отчета) Кратко и грубо: 1. Временные таблицы - это "дерьмо мамонта" (;) субъективно) 2. Со времен SQL 7 много воды утекло. Область оправданного применения хранимых процедур уменьшилась. Сейчас их применение в основном имеет смысл для внесения изменений в данные в таблицах. Если вашей целью является получение выборки данных - используйте табличные функции - они под это заточены. А вы всё норовите через анус: "обмнануть, заставить..." :) P.S. И из VBA через ADO тоже можно свободно табличные функции вызывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2008, 10:29 |
|
||
|
Reporting Service- ошибка
|
|||
|---|---|---|---|
|
#18+
GholaЗачем вообще использовать хранимые процедуры для отчётов?Ну в моем случае это наследство. Пришел на это место а тут система офигеть. Отчеты выдаются в ексел, но хитрым способом. Шаблоны отчетов хранятся в базе, и при вызове отчета, сначала из базы выгружается шаблон, затем уже заполняется отчет. То есть чтоб чтото изменить, придется самому сначала выгрузить его , заменить шаблон, загрузить обратно в базу, а потом изменить код заполнения отчета. Вот я и решил постепенно переводить их на SSRS. А в этом отчете уже использовалась хранимка. причем с большим кодом. Мне проще было использовать уже готовую процедуру, для отчета. Хотя конечно всетаки придется упрощать когда-нибудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2008, 10:38 |
|
||
|
Reporting Service- ошибка
|
|||
|---|---|---|---|
|
#18+
Понятно. Конечно, в Вашем случае это возможно оправдано. Но, по-моему, переписать возвращающую выборку хранимую процедуру в табличную функцию - чисто механическая задача. Практически Searсh& Replace. Заменить заголовок (CREATE FUNCTION(...)), заменить временные таблицы, если они есть, на табличные переменные (DECLARE @t TABLE(...)), и в конце добавить RETURN. Вроде всё. Для использования с новым кодом (RS) я бы написал на базе старых хранимых процедур табличные функции. Ну и для для сохранения преемственности со старым кодом, (хотя это уже не обязательно) я бы переписал старые хранимые процедуры так, чтобы они возвращали значение вновь написанных функций (SELECT * FROM Fn(...)). Дело в том, что вызывать хранимые процедуры из функций в общем случае нельзя, а из процедур функции - можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2008, 10:47 |
|
||
|
|

start [/forum/topic.php?fid=31&msg=35561086&tid=1536678]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 349ms |

| 0 / 0 |
