none
Запись данных в таблицу базы MS SQL Server 2008 r2 из веб-сервиса в 2 этапа. RRS feed

  • Вопрос

  • Здравствуйте! Помогите, пожалйста, новичку. Второй день мучаюсь с такой проблемой.

    Я хочу записать данные из формы через веб-сервис в таблицу dbo.Zajavka бд MS SQL Server 2008 r2. Для этого написал следующую процедуру: 

    CREATE PROCEDURE StoreData
    @ID_ProblemCategory int,
    @ID_Rating int,
    @ID_Prioritet int,
    @ID_Status int, 
    @DateTime_Post datetime, 
    @DateTime_Close datetime,
    @ProblemComm varchar(500),
    @ResolutionComm varchar(500),  
    @Time_Work float,
    @ID_User int
    AS 
    
    INSERT INTO dbo.Zajavka(ID_ProblemCategory,ID_Rating,ID_Prioritet,ID_Status,DateTime_Post,DateTime_Close,ProblemComm,ResolutionComm,Time_Work,ID_User)
     VALUES( @ID_ProblemCategory, @ID_Rating, @ID_Prioritet, @ID_Status, @DateTime_Post, @DateTime_Close, @ProblemComm, @ResolutionComm, @Time_Work, @ID_User);
    
    
    


     Проблема в том, что в форме, которая отправляет данные в веб-сервис,  заполняются не все поля, имеющиеся в таблице. Т.е. сначала в таблицу должна помещаться  запись с заполненными полями ID_ProblemCategory, ProblemComm, Prioritet, ID_User, а остальные поля должны заполняться позже тоже отправкой данных из формы через веб-сервис. 

    Поля ID_ProblemCategory,ID_Rating,ID_Prioritet,ID_Status, ID_User являются внешними ключами, допускают значение null. Но если хотя бы одно из них не заполнено, то запись в таблицу не добавляется.

    Я так понимаю, нужно написать триггер, чтобы при добавлении новой записи в незаполненные поля писалось null.

    Я в правильном направлении? Если да, то подскажите, как это реализовать?

    20 октября 2011 г. 6:59

Ответы

  • Оказалось все просто. Поля ID_ProblemCategory,ID_Rating,ID_Prioritet,ID_Statu­​­s, ID_User типа int. Если они не заполнены, то видимо по умолчанию им присваивается значение 0, а это значение отсутствует в связанных таблицах, поэтому записи не добавлялись. Добавил в самой процедуре StoreData условие на проверку этих полей, если в них 0, то присвоить им null. После этого запись добавилась в таблицу.
    • Помечено в качестве ответа vorubiam 20 октября 2011 г. 7:48
    20 октября 2011 г. 7:48

Все ответы

  • Оказалось все просто. Поля ID_ProblemCategory,ID_Rating,ID_Prioritet,ID_Statu­​­s, ID_User типа int. Если они не заполнены, то видимо по умолчанию им присваивается значение 0, а это значение отсутствует в связанных таблицах, поэтому записи не добавлялись. Добавил в самой процедуре StoreData условие на проверку этих полей, если в них 0, то присвоить им null. После этого запись добавилась в таблицу.
    • Помечено в качестве ответа vorubiam 20 октября 2011 г. 7:48
    20 октября 2011 г. 7:48
  • По-моему, нужно установить для незаполняемых полей значение по умолчанию
    null.
     
     
    20 октября 2011 г. 7:53
    Модератор
  • По-моему, нужно установить для незаполняемых полей значение по умолчанию
    null.
     
     

    Пробовал так. Устанавливал null по умолчанию в сценарии создания и таблицы, и процедуры. Почему-то у меня не работает.
    20 октября 2011 г. 9:33
  • Как вы передаете значения в хранимую процедуру для незаполненных полей? Попробуйте указать им значение DBNull.Value. Тогда в соотвествующие столбцы должно записаться NULL значение, если они конечно разрешают его.


    Для связи [mail]
    20 октября 2011 г. 10:37