我對高級數據庫查詢和存儲過程比較陌生,而且我在下面的過程中發現了第三個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