2014-01-29 21 views
0

我有一個包含數字的列的臨時表。 我想使用臨時表中的列並將它們與IF語句進行比較。來自臨時表的IF語句

... 


INSERT INTO #tmp 
EXEC [p_GetComplete] @Car_ID 

IF Col1 + Col2 = Col3 
BEGIN 
PRINT 'OK' 
END 
ELSE 
BEGIN 
PRINT 'NO' 
END 

... 
+0

我認爲如果你在數據庫中做IF,你會做錯事情...... SQL是一種基於集合的語言,你的程序邏輯應該在你的應用程序中而不是你的存儲器中。 – Liath

+0

您必須選擇這些值,是否始終只有一行,如果不是,您是否希望爲匹配條件的每一行執行一個操作?如果是這樣的行動? –

+0

@AlexK。是的,總會只有一行。 – TheUser

回答

1

SQL是做對SET操作,這樣可以避免CASE是否以及何時,只要你可以:

你可以這樣來做(推薦):

SELECT 'Ok' FROM #tmp WHERE Col1+Col2=Col3 
UNION ALL 
SELECT 'NO' FROM #tmp WHERE NOT (Col1+Col2=Col3) 

或本方式:

SELECT CASE WHEN Col1+Col2=Col3 THEN 'Ok' ELSE NO FROM #tmp WHERE 
0

據推測,exec只返回一行,並且捕獲數據的唯一方法是放入一個表中。您可以重寫存儲過程以具有適當的OUTPUT參數,但讓我們假設這是不可能的。

你可以做你的想:

INSERT INTO #tmp 
EXEC [p_GetComplete] @Car_ID 

IF exists(select * from #temp where Col1 + Col2 = Col3) 
BEGIN 
PRINT 'OK'; 
END 
ELSE 
BEGIN 
PRINT 'NO'; 
END; 

也就是說,如果存在行,所述條件爲真,然後打印'OK'