Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > хранимая процедура на UPDATE неправильно работает


Автор: lsstream 20.6.2009, 00:31
Здравствуйте, я заранее извиняюсь если не в том разделе пишу.
так вот у меня такая проблема)) 
мне нужно обновлять данные во view из нескольких таблиц. делаю я это так: есть метод на выделение. когда выделяю строчку в таблице (view) то все данные каждого поля заполняются в textbox'ы. далее если надо я их редактирую, и потом обновляю хранимой процедурой. 
у меня все поля типа nvarchar() и два поля типа int (одно из них id, и естественно не считывается в текстбокс, второе - год)
проблема в том что обновляется только поле год.
хранимая процедура написана вроде правильно, вот ее текст:

Код

ALTER PROCEDURE dbo.StoredUp
    (
    @book_name nvarchar(MAX)
    ,@avtor_name nvarchar(MAX)
    ,@god int
    ,@country_name nvarchar(MAX)
    ,@janr nvarchar(MAX)
    )
AS     BEGIN
declare @id_avtor int
declare @id_country int
declare @id_janr int
declare @id_book int
SELECT @id_avtor=id_avtor FROM avtori WHERE avtori.avtor_name=@avtor_name
SELECT @id_country=id_country FROM countries WHERE countries.country_name=@country_name
SELECT @id_janr=id_janr FROM janri WHERE janri.janr=@janr
SELECT @id_book=id_book FROM books WHERE books.book_name=@book_name


UPDATE avtori SET @avtor_name=avtor_name WHERE id_avtor=@id_avtor

UPDATE countries SET country_name=@country_name WHERE id_country=@id_country

UPDATE janri SET janr=@janr WHERE id_janr=@id_janr

UPDATE books SET god=@god WHERE id_book=@id_book

UPDATE books SET book_name=@book_name WHERE id_book=@id_book


END


подскажите в чем возможная проблема?

Автор: SKrivosein 21.6.2009, 03:22
Тажело разобратся не видя таблиц. Но главная проблема мне кажется вот в чем,  значение например "countries.country_name" у тебя в таблице уникально? Что получится если там несколько одинаковых значений при выполнении этого,
Код

DECLARE @id_country int
....
SELECT @id_country=id_country FROM countries WHERE countries.country_name=@country_name
 выберет последнее которое найдёт селект. 
Иначе зачем вобще находить "id_country", приказ 
Код
UPDATE countries SET country_name=@country_name WHERE country_name=@country_name
 должен нормально работать, но в этом случае изменит все значения в таблице
 Возможно я в чемто ошибаюсь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)