2010-04-27 21 views
0

奇怪的情況 在觸發器中,我給變量賦了一個列值,但在使用該變量插入其他表時給出異常。在sql server中獲取空值的變量

e.g

選擇@ srNO = A.SrNo從A其中id = 123;
插入到B(SRNO)值(@srNo)//這裏給空


我跑在上面的查詢窗格中選擇查詢它工作正常,但在觸發它給了我零

任何建議

ALTER PROCEDURE過程數據
@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 '%'[email protected] + '%'<br/> 

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

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

請問您可以發佈完整的CREATE TRIGGER語句嗎? – Quassnoi 2010-04-27 11:23:10

+0

上面程序從觸發器調用 – 0cool 2010-04-28 05:53:33

+0

正如Quassnoi所說,你可以發佈完整的'CREATE TRIGGER'語句來調用這個過程嗎? – Thomas 2010-04-28 13:26:36

回答

0

解決了它在xml字符串讀取功能中存在一些錯誤 e。g在openxml模式匹配

感謝大家的幫助... :)

1

您應該使用觸發器中的行集,因此如果多行受到影響,您的代碼將處理所有行。

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

,你可以確信,SELECT SrNo FROM A WHERE id = 123返回數據:當值不爲空,這將只能插入? 我的意思是,@srNo的價值不會改變(因此,保持NULL)如果用id = 123

+0

id = 123的值是 – 0cool 2010-04-28 03:29:31

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 

如果不是的話,那麼我們就需要看到觸發本身的細節。

+0

不是它的情況下,表B已經存在,並且具有從中獲取關鍵字的主關鍵字表取決於作爲表的主關鍵字的id。 這是在觸發後插入。 – 0cool 2010-04-28 03:37:19

+0

也有插入,而不是在同一張桌子上的觸發器 – 0cool 2010-04-28 06:06:46

+0

@Neo - 我不知道你在第一個評論中想說什麼。你說你添加到你的文章的過程是從後觸發器調用的。表A或表B的後續觸發器?那是什麼而不是觸發器? 「@ SenderPhone」如何設置?它不是一個參數,也不會被聲明?你能發佈實際的觸發器以及它如何調用你的存儲過程嗎? – Thomas 2010-04-28 13:25:24