Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Процедура возвращает не то, что надо, по идее 
V
    Опции темы
Kolia
Дата 10.1.2006, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 132
Регистрация: 11.7.2003
Где: Вильнюс

Репутация: нет
Всего: нет



Вот имеем процедуру
Код

ALTER    PROCEDURE tbl.usp_get_need_print_doc_filename
(
    @project_id t_identifier,
    @prtype_id    t_identifier,
    @filename        varchar(255) OUTPUT
)
AS
BEGIN
    DECLARE @doc_id t_identifier
    DECLARE @result_aaa integer
    DECLARE @filename_out varchar(255)

    SET @filename_out = NULL
    DECLARE c_doc_list CURSOR STATIC
                    FOR
                            SELECT
                                        pr_doc.id,
                                        pr_doc.filename
                            FROM
                                        tbl.t_prtype_doc pr_doc WITH(NOLOCK)
                            WHERE
                                        pr_doc.prtype_id = @prtype_id
                                        AND (
                                                    pr_doc.id = 'mn85'
                                                    OR pr_doc.id = 'a2'
                                                    OR pr_doc.id = 'mn95'
                                                    OR pr_doc.id = 'mn96'
                                                )
    OPEN c_doc_list

    FETCH c_doc_list INTO @doc_id, @filename_out

    /*    Probegajem po rezul'tatu SELECT'a    */
    WHILE @@FETCH_STATUS = 0
    BEGIN
        /* вызывается процедура, которая проверяет дополнительные условия. */
        EXECUTE @result_aaa = tbl.usp_need_to_print @doc_id, @project_id, 'L'
        IF @result_aaa > 0
        BEGIN
            SET @filename = @filename_out
            BREAK
        END

        SELECT @doc_id = NULL, @filename_out = NULL
        FETCH c_doc_list INTO @doc_id, @filename_out
    END

    CLOSE c_doc_list
    DEALLOCATE c_doc_list

END


А ета та процедура, которую вызывает предыдущая
Код

ALTER    PROCEDURE tbl.usp_need_to_print
(
    @doc_id t_identifier,
    @param1 t_identifier,
    @type char(1) -- L - leasing, F - factoring
)
AS

DECLARE @sql nvarchar(2000)

IF @type = 'L'
    SET @sql = (select sql_condition from tbl.t_prtype_doc with(nolock) where id = @doc_id)

IF @type = 'F'
    SET @sql = (select sql_condition from tbl.t_factoring_type_doc with(nolock) where id = @doc_id)

EXEC sp_executesql @sql, N'@param1 t_identifier', @param1
return @@ROWCOUNT


Так вот, при вызове usp_get_need_print_doc_filename параметр @filename_out является почему то не таким как надо - "1". Даже если я перед самым концом процедуры напишу SET @filename = 'kol', то все равно ничего не изменится.
Как я понимаю проблема с EXECUTE @result_aaa = tbl.usp_need_to_print @doc_id, @project_id, 'L', но что именно плохо smile smile

Это сообщение отредактировал(а) Kolia - 10.1.2006, 16:00
--------------------
Риспект
PM MAIL ICQ Skype GTalk MSN   Вверх
SergeBS
Дата 12.1.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 5
Всего: 22



Kolia


SELECT @doc_id = NULL, @filename_out = NULL

Объясни мне, что делает эта строка? Где источник для SELECT?


FETCH c_doc_list INTO @doc_id, @filename_out

Объясни мне, что делает эта строка? Где источник для @filename_out? Вижу только для @doc_id, т.е. @filename_out неявно убивается. Напиши, например
FETCH c_doc_list,1 INTO @doc_id, @filename_out
Для начала.
PM MAIL   Вверх
Vit
Дата 12.1.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Цитата(SergeBS @ 12.1.2006, 05:35 Найти цитируемый пост)

Kolia


На форумах обращение к конкретному участнику не приветствуется здесь коллективное обсуждение.


Цитата(SergeBS @ 12.1.2006, 05:35 Найти цитируемый пост)

SELECT @doc_id = NULL, @filename_out = NULL

Объясни мне, что делает эта строка? Где источник для SELECT?


Нигде, эта строка присваевает значения переменным @doc_id и @filename_out

Цитата(SergeBS @ 12.1.2006, 05:35 Найти цитируемый пост)

FETCH c_doc_list INTO @doc_id, @filename_out


Вызывает следующую строку курсора и передаёт её в переменные. Подробности: любой букварь по базам данным, глава "Курсоры данных"


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.