在sql server中获取Null值变量

时间:2010-04-27 11:15:26

标签: sql-server sql-server-2005

奇怪的情况 在触发器中,我将一个列值赋给变量,但在使用该变量插入其他表时会出现异常。

e.g

从A中选择@ srNO = A.SrNo,其中id = 123;
插入B(SRNO)值(@srNo)//这里它给出null


我在查询窗格中运行上面的选择查询它工作正常,但在触发器中它给我null
任何建议

ALTER PROCEDURE ProcessData
@Id十进制(38,0),
@XMLString varchar(1000),
@Phone varchar(20)
AS
DECLARE

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

BEGIN
    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 个答案:

答案 0 :(得分:1)

您应该使用触发器中的行集,因此如果多行受到影响,您的代码将处理所有行。这只会在值不为null时INSERT:

INSERT INTO B (SRNO)
SELECT A.SrNo FROM A where id=123 AND A.SrNo IS NOT NULL

答案 1 :(得分:1)

Neo ,您确定SELECT SrNo FROM A WHERE id = 123会返回数据吗? 我的意思是,如果没有id = 123

的记录,@ srNo的值不会改变(因此保持为NULL)

答案 2 :(得分:1)

  

当你消除不可能的事物时,无论多么不可能,遗体都必须是真理。

显而易见的答案是,在触发器触发时,SrNo为空或Id 123不存在。这是否为插入触发器,是否尝试将刚刚插入表A的内容并将其推入表B?如果是这样,您应该查询inserted表:

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

如果不是这种情况,那么我们需要查看触发器本身的详细信息。

答案 3 :(得分:0)

解决了它在xml字符串读取函数中有一些错误 例如在openxml模式匹配中

感谢各位的帮助...... :)