2013-10-09 41 views
0

我正在創建一個從多個表中返回數據的存儲過程,因此它有幾個塊,最終導致一個臨時表。唯一的問題是它沒有生產任何東西。所有的單獨的塊似乎都起作用,但總體來說它沒有。由於某種原因,我的存儲過程沒有任何返回

我覺得我可能會缺少一些小東西,所以你的意見是讚賞。

@ref_num VARCHAR(20) 

AS 
BEGIN 
    SET NOCOUNT ON; 

BEGIN TRY 

    DECLARE @clKey INT 
    DECLARE @clName VARCHAR(50) 
    SET @clKey = (SELECT ClearingBroker FROM DocumentRecieved WHERE ref_num = @ref_num) 
    SET @clName = (SELECT EB_Name FROM EB_Company WHERE EB_dtc_num = @clKey) 

    SELECT 
       a.ref_num 
       ,b.DateSent 
       ,b.Document as 'FormName' 
       ,b.ClearingBroker as 'ClearingBrokerID' 
       ,b.ExecutingBroker as 'ExecutingBrokerID' 
       ,c.EB_Name 
       ,a.AccountName 
    INTO   
       #Temp1 
    FROM 
       EB_Company c JOIN PBIN_records a ON c.EB_dtc_num = a.eb_key 
          JOIN DocumentRecieved b ON a.ref_num = b.ref_num 
    WHERE 
       a.ref_num = @ref_num 

--================================================================================================ 

    CREATE TABLE 
       #Temp2 (
          ClearingBroker VARCHAR(50) 
         ) 

--================================================================================================ 

    INSERT INTO 
       #Temp2 (
          ClearingBroker 
         ) 

    VALUES 
         (
          @clName 
         ) 

--================================================================================================      

    SELECT 
      fName + ' ' + lName as 'SentBy' 
    INTO 
      #Temp3 
    FROM 
      Master_Contacts JOIN PBIN_records ON PBIN_records.eb_contact_key = Master_Contacts.contactID 
    WHERE 
      PBIN_records.ref_num = @ref_num 

--================================================================================================ 

    SELECT 
      #Temp1.ref_num, 
      #Temp1.FormName, 
      #Temp1.DateSent, 
      #Temp1.ClearingBrokerID, 
      #Temp2.ClearingBroker, 
      #Temp1.ExecutingBrokerID, 
      #Temp1.EB_Name, 
      #Temp1.AccountName, 
      #Temp3.SentBy 
    INTO 
      #Temp4 
    FROM 
      #Temp1, #Temp2, #Temp3 

--================================================================================================ 

    SELECT 
      * 
    FROM 
      #Temp4 

--================================================================================================ 

END TRY 

編輯:看來,因爲我的表之一,在它破壞了整個過程,因爲我最後的SELECT INTO是我的前三個臨時表之間的笛卡爾積的那一刻有沒有記錄。

+1

你嘗試第二次到最後選擇沒有INTO,看看它是要插入到臨時#4 – logixologist

+0

你有沒有承諾? – mucio

+0

似乎沒有什麼能讓它變得如此遙遠。因爲我仍然沒有得到任何東西...... – Carson

回答

5

問題:你真的想要一個#Temp1,#Temp2,#Temp3之間的笛卡爾積嗎?我在問,因爲FROM #Temp1, #Temp2, #Temp3代表笛卡爾產品。

其中一個可能的原因是這三個表中的一個沒有行。

例如:下面的查詢

SELECT * 
FROM (SELECT 1 UNION ALL SELECT 2) AS TableA(ID) 
CROSS JOIN (SELECT 1 WHERE 1=0) AS TableB(ID) 

輸出0行

ID   ID 
----------- ----------- 

(0 row(s) affected) 
+0

我的一個臨時表沒有任何行,是什麼把它扔掉? – Carson

+1

@Carson:是的。在我的例子中,'TableB'有0行。 –

+0

將三張表格插入表格4的更好方法是什麼? – Carson

相關問題