我对高级数据库查询和存储过程比较陌生,而且我在下面的过程中发现了第三个UPDATE
语句,这是IF
代码块中的一个语句。问题是我需要向这些帐户添加成员资格号,因此第一次迭代UPDATE
将lp.ID_1
添加到我的临时表中,而第二次迭代将lp.ID_2
添加到临时表中。第三次迭代需要从原始INSERT
语句(其中ident
仍应为NULL)中取出其余行,并将ident
列与ID_1
和ID_2
连接在一起,因为这些帐户都具有成员资格。存储过程中的SQL IF条件
我已经在IF
块中尝试了几个条件,但似乎每次都没有找到解决方案。
USE [database_1]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[stored_procedure_1] @acct char(8)
AS
WITH X AS
(
select distinct st.ship2, t.name, null AS ident
from sales_table st
INNER JOIN accounts_table t ON st.ship2 = t.acct
where st.bill2 = @acct
)
SELECT x.ship2 AS s_acct
,x.name
,COALESCE(ident, lp.ID_1 +', '+ lp.ID_1 , lp.ID_2 , lp.ID_2 , '') AS Ident
FROM X
LEFT JOIN lp_table lp ON x.ship2 = lp.acct COLLATE Latin1_General_CS_AS
WHERE COALESCE(ident, lp.ID_2 +', '+ lp.ID_1 , lp.ID_1 , lp.ID_2 , '') <> ''
select * from X
where ident is not null
你有没有尝试删除if语句,只是'UPDATE'语句被调用吗?你有检查身份是否为空,所以它应该做你期望它做的事情。 –
“'拿走剩余的行......并将ident列与ID_1和ID_2连接起来,因为这些帐户都有成员资格。”“不! **不要这样做!**这是一个有缺陷的schema_。如果帐户可以有多个成员资格,则需要单独的表将帐户映射到成员资格。 **绝不**将csv数据放入列中! –
@JohnOdom,如果我删除了'IF'条件,程序将正常运行,而最后一个'UPDATE'没有任何影响。换句话说,就像最后一个'UPDATE'不在那里一样。 – soundwave