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/>
答案 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
答案 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模式匹配中
感谢各位的帮助...... :)