Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Reporting Service- ошибка / 12 сообщений из 12, страница 1 из 1
24.09.2008, 15:38
    #35557220
alm2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Reporting Service- ошибка
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 - нет.
В чем дело ?
...
Рейтинг: 0 / 0
24.09.2008, 16:59
    #35557556
Ghola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Reporting Service- ошибка
Пробовал указать Command type - "StoredProcedure" и никаких EXEC? Просто имя и параметры? Ты смотрел на эту тему в MSDN?
...
Рейтинг: 0 / 0
25.09.2008, 07:09
    #35558406
alm2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Reporting Service- ошибка
Видел на форуме похожий вопрос
Причина в том, что в хранимой проц используется вывод во временную таблицу #tmp

А остальное все правильно.
Как решить вопрос - не нашел
...
Рейтинг: 0 / 0
25.09.2008, 09:02
    #35558489
Дикий Билл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Reporting Service- ошибка
Я с подобным сталкивался. Решил так.
1 Закоментировал код всей процедуры.
2 Добавил в процедуру команду SELECT со структурой, которая в исходном коде.
3 Делаешь отчет.
4 Потом процедуру возвращаешь к нужному виду - у меня так сработало
...
Рейтинг: 0 / 0
25.09.2008, 17:32
    #35560433
Ghola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Reporting Service- ошибка
alm2Видел на форуме похожий вопрос
Причина в том, что в хранимой проц используется вывод во временную таблицу #tmp

А остальное все правильно.
Как решить вопрос - не нашел

Ребята, а вместо временной таблицы, табличная переменная не прокатит?
...
Рейтинг: 0 / 0
26.09.2008, 01:52
    #35561000
Дикий Билл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Reporting Service- ошибка
Да можно и временную таблицу, просто сделай как я описал, как бы обмани дизайнер отчетов сначала, а потом верни свой код в процедуру и все работает
...
Рейтинг: 0 / 0
26.09.2008, 08:07
    #35561086
alm2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Reporting Service- ошибка
Дикий БиллЯ с подобным сталкивался. Решил так.
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 ...

БЕЗ ПАРАМЕТРОВ ?
...
Рейтинг: 0 / 0
26.09.2008, 09:04
    #35561141
Дикий Билл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Reporting Service- ошибка
параметры все оставить, какие должны быть.
Просто в теле процедуры все закоментировать. Вставить толкьо селект возвращающий результат с нужными полями (как в настоящем коде). Это только на время первых шагов создания отчета. Потом возвращаешь старый код и все продолжает работать, по крайней мере у меня так сработало.
...
Рейтинг: 0 / 0
26.09.2008, 10:09
    #35561278
alm2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Reporting Service- ошибка
Дикий Биллпараметры все оставить, какие должны быть.
Просто в теле процедуры все закоментировать. Вставить толкьо селект возвращающий результат с нужными полями (как в настоящем коде). Это только на время первых шагов создания отчета. Потом возвращаешь старый код и все продолжает работать, по крайней мере у меня так сработало.

СПАСИБО - У МЕНЯ ТО ЖЕ ЗАРАБОТАЛО
...
Рейтинг: 0 / 0
26.09.2008, 10:29
    #35561335
Ghola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Reporting Service- ошибка
Зачем вообще использовать хранимые процедуры для отчётов? Они необходимы только для внесения изменений в данные внутри таблиц. Для получения параметризованных выборок (т.е. селектов), которые собственно и нужны для отчётов - лучше использовать хранимые табличные функции. Они "легче". А внутри этих функций, для хранения промежуточных данных, например выбранных из курсора, вместо временных таблиц - табличные переменные. Они тоже "легче". Это всё работает начиная с SQL2000.

См. также топик: не берутся данные из временной таблицы(Stor.Proc для отчета)

Кратко и грубо:
1. Временные таблицы - это "дерьмо мамонта" (;) субъективно)
2. Со времен SQL 7 много воды утекло. Область оправданного применения хранимых процедур уменьшилась. Сейчас их применение в основном имеет смысл для внесения изменений в данные в таблицах. Если вашей целью является получение выборки данных - используйте табличные функции - они под это заточены.

А вы всё норовите через анус: "обмнануть, заставить..." :)

P.S. И из VBA через ADO тоже можно свободно табличные функции вызывать.
...
Рейтинг: 0 / 0
26.09.2008, 10:38
    #35561365
Дикий Билл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Reporting Service- ошибка
GholaЗачем вообще использовать хранимые процедуры для отчётов?Ну в моем случае это наследство. Пришел на это место а тут система офигеть. Отчеты выдаются в ексел, но хитрым способом. Шаблоны отчетов хранятся в базе, и при вызове отчета, сначала из базы выгружается шаблон, затем уже заполняется отчет. То есть чтоб чтото изменить, придется самому сначала выгрузить его , заменить шаблон, загрузить обратно в базу, а потом изменить код заполнения отчета.
Вот я и решил постепенно переводить их на SSRS. А в этом отчете уже использовалась хранимка. причем с большим кодом. Мне проще было использовать уже готовую процедуру, для отчета. Хотя конечно всетаки придется упрощать когда-нибудь.
...
Рейтинг: 0 / 0
29.09.2008, 10:47
    #35564608
Ghola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Reporting Service- ошибка
Понятно. Конечно, в Вашем случае это возможно оправдано. Но, по-моему, переписать возвращающую выборку хранимую процедуру в табличную функцию - чисто механическая задача. Практически Searсh& Replace. Заменить заголовок (CREATE FUNCTION(...)), заменить временные таблицы, если они есть, на табличные переменные (DECLARE @t TABLE(...)), и в конце добавить RETURN. Вроде всё.
Для использования с новым кодом (RS) я бы написал на базе старых хранимых процедур табличные функции. Ну и для для сохранения преемственности со старым кодом, (хотя это уже не обязательно) я бы переписал старые хранимые процедуры так, чтобы они возвращали значение вновь написанных функций (SELECT * FROM Fn(...)). Дело в том, что вызывать хранимые процедуры из функций в общем случае нельзя, а из процедур функции - можно.
...
Рейтинг: 0 / 0
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Reporting Service- ошибка / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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