0
我只是學習在存儲過程中使用while循環我不知道爲什麼存儲過程不會返回任何值。如何在while循環中存在SQL Server存儲過程?
我使用if exists來檢查id是否存在於表中。 如果有多個ID我需要再次執行相同的查詢。
我試過使用while循環和它不工作。
我聲明@keyValue
作爲Varchar
和它導致錯誤轉換VARCHAR值「c29dc109b310479fa5c281eb20c61656」爲數據類型int時
轉換失敗。
這就是爲什麼我用COUNT
在WHILE
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;
請不要使用不適用於您的問題的標籤。我刪除了數據庫標記,因爲它不清楚你實際使用了哪一個。請添加*的標籤*您實際使用的數據庫 –
我使用的是sql server 2008 – hunt