Получение значения Null переменной на сервере SQL - PullRequest
0 голосов
/ 27 апреля 2010

Странная ситуация В триггере я присваиваю значение столбца переменной, но выдает исключение при вставке в другую таблицу, используя эту переменную.

например

выберите @ srNO = A.SrNo из A, где id = 123;
вставить в B (SRNO) значения (@srNo) // здесь это дает ноль


Я запускаю выше запрос на выборку в панели запросов, он работает нормально, но в триггере он дает мне ноль

любые предложения

ИЗМЕНЕНИЕ ПРОЦЕДУРЫ ProcessData
@ Десятичный (38,0),
@XMLString varchar (1000),
@ Phone varchar (20)
AS
ОБЪЯВИТЬ

@ idoc int,
@iError int,
@Serial varchar (15),
@PhoneNumber varchar (15),

НАЧАТЬ
COMMIT TRAN

EXEC sp_xml_preparedocument @idoc OUTPUT,@XMLString<br/>

SELECT @iError = @@Error<br/>
         IF @iError = 0<br/>
    BEGIN<br/>


SELECT @Serial = convert (text, [text]) FROM OPENXML (@idoc, '', 1), где nodetype = 3 и ParentId = 2

        IF @Serial=Valid <br/>

                      BEGIN<br/>
                            BEGIN TRAN INVALID<br/>
                            begin try <br/>
                            Declare @phoneId decimal(38,0);<br/>
                               SELECT @phoneId = B.phoneId  FROM A
        INNER JOIN B ON A.Id = B.Id WHERE A.PhoneNumber like '%'+@SenderPhone + '%'<br/>

        print @phoneId ; //gives null<br/>

            end try<br/>
            begin catch<br/>
            print Error_Message();<br/>
            end catch<br/>

Ответы [ 4 ]

1 голос
/ 27 апреля 2010

Neo , вы уверены, что SELECT SrNo FROM A WHERE id = 123 возвращает данные? Я имею в виду, значение @srNo не изменится (следовательно, останется NULL), если нет записей с id = 123

1 голос
/ 27 апреля 2010

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

Очевидный ответ заключается в том, что в момент срабатывания триггера SrNo равен нулю или Id 123 не существует. Это для триггера вставки, и вы пытаетесь взять что-то, что было только что вставлено в таблицу A, и вставить это в таблицу B? Если это так, вы должны выполнить запрос к таблице inserted:

//from an insert trigger on the table `A`
Insert B( SRNO )
Select SRNO
From inserted
Where Id = 123

Если это не так, то нам нужно увидеть детали самого триггера.

1 голос
/ 27 апреля 2010

вы должны работать с наборами строк в триггерах, поэтому, если затрагивается несколько строк, ваш код обрабатывает все строки. Это будет только вставить, когда значение не является нулевым:

INSERT INTO B (SRNO)
SELECT A.SrNo FROM A where id=123 AND A.SrNo IS NOT NULL
0 голосов
/ 28 апреля 2010

решено, есть ошибка в функции чтения XML-строк например, в сопоставлении с шаблоном openxml

Спасибо всем за помощь ...:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...