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