2017-04-03 81 views
0

我只是學習在存儲過程中使用while循環我不知道爲什麼存儲過程不會返回任何值。如何在while循環中存在SQL Server存儲過程?

我使用if exists來檢查id是否存在於表中。 如果有多個ID我需要再次執行相同的查詢。

我試過使用while循環和它不工作。

我聲明@keyValue作爲Varchar和它導致錯誤轉換VARCHAR值「c29dc109b310479fa5c281eb20c61656」爲數據類型int時

轉換失敗。

這就是爲什麼我用COUNTWHILE

IF EXISTS (SELECT t1.ref_id 
      FROM pbosproinvoiceitem t1 
      WHERE t1.ref_id = @keyValue) 
    WHILE COUNT(@keyValue) > 1 
    BEGIN 
     --need to do for loop 
     SELECT @balWghtSso = (SELECT t1.act_wght 
           FROM ccossoitem t1 
           WHERE t1.master_id = @keyValue) - 
          (SELECT t1.wght 
           FROM ccossoitem t1 
           WHERE t1.master_id = @keyValue) 
     SELECT @balWghtBl = (SELECT t1.act_wght 
          FROM ccosblitem t1 
          WHERE t1.master_id = @keyValue) - 
          (SELECT t1.wght 
          FROM ccosblitem t1 
          WHERE t1.master_id = @keyValue) 

     SELECT DISTINCT 
      t1.debtor_code AS customer_code, t1.tml_code, t1.scn, 
      t2.cg_type, t3.qty, @balWghtSso AS mea, t3.vol, 
      CASE 
       WHEN t3.from_loc = 'DL' THEN 1 ELSE 0 
      END AS ex_wharf, 
      t2.dg_flg, 0 AS conveyor_ind, t1.sso_num AS ref_doc_num, 
      t1.id AS ref_id 
     FROM 
      ccosso t1 
     INNER JOIN 
      ccossoitem t2 ON t1.id = t2.master_id 
     INNER JOIN 
      ccosgodown t3 ON t3.blso_id = t1.id AND t3.blso_item_id = t2.id 
     WHERE 
      t3.move_type = 'LOAD' 
      AND t1.id = @keyValue 

     UNION ALL 

     SELECT DISTINCT 
      t1.debtor_code AS customer_code, t1.tml_code, t1.scn, 
      t2.cg_type, t3.qty, 
      @balWghtBl AS mea, t3.vol, 
      CASE 
       WHEN t3.from_loc = 'DD' THEN 1 ELSE 0 
      END AS ex_wharf, 
      t2.dg_flg, 0 AS conveyor_ind, t1.bl_num AS ref_doc_num, 
      t1.id AS ref_id 
     FROM 
      ccosbl t1 
     INNER JOIN 
      ccosblitem t2 ON t1.id = t2.master_id 
     INNER JOIN 
      ccosgodown t3 ON t3.blso_id = t1.id AND t3.blso_item_id = t2.id 
     WHERE 
      t3.move_type = 'DELV' 
      AND t1.id = @keyValue 
    END; 
+0

請不要使用不適用於您的問題的標籤。我刪除了數據庫標記,因爲它不清楚你實際使用了哪一個。請添加*的標籤*您實際使用的數據庫 –

+0

我使用的是sql server 2008 – hunt

回答

0

你必須重新寫你的while循環如下圖所示,取下是否存在條件。

WHILE(SELECT COUNT(1) 
FROM pbosproinvoiceitem t1 
WHERE t1.ref_id = @keyValue > 1) 
+0

@hunt,做了這項工作嗎? –