Sql server 2008 如何在SQL Server存储过程中使用if exist进行while循环?
我正在学习在存储过程中使用while循环,我不知道为什么存储过程不返回任何值 我正在使用if-exist检查表中是否存在id。 如果有超过1个id,我需要再次执行相同的查询 我尝试使用while循环,但它不起作用 我将Sql server 2008 如何在SQL Server存储过程中使用if exist进行while循环?,sql-server-2008,stored-procedures,Sql Server 2008,Stored Procedures,我正在学习在存储过程中使用while循环,我不知道为什么存储过程不返回任何值 我正在使用if-exist检查表中是否存在id。 如果有超过1个id,我需要再次执行相同的查询 我尝试使用while循环,但它不起作用 我将@keyValue声明为Varchar,它会导致错误 将varchar值“c29dc109b310479fa5c281eb20c61656”转换为数据类型int时,转换失败 这就是为什么我在WHILE IF EXISTS (SELECT t1.ref_id
@keyValue
声明为Varchar
,它会导致错误
将varchar值“c29dc109b310479fa5c281eb20c61656”转换为数据类型int时,转换失败
这就是为什么我在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;
您必须像下面那样重新编写while循环,并删除IF exists条件
WHILE( SELECT COUNT(1)
FROM pbosproinvoiceitem t1
WHERE t1.ref_id = @keyValue > 1)
请不要使用不适用于您的问题的标记。我删除了数据库标签,因为不清楚您实际使用的是哪一个。请仅添加您实际使用的数据库的标记我正在使用sql server 2008