我有一個存儲過程,我試圖根據提供的tinyint
參數有條件地選擇一個特定的表。這是我的代碼:有條件地選擇CASE的表格
ALTER PROCEDURE [dbo].[GetAllStuff]
@countryId tinyint
AS
BEGIN
SET NOCOUNT ON;
DECLARE @marketSpecific TABLE
SET @marketSpecific =
(CASE (@countryId)
WHEN 1 THEN test_sv
WHEN 2 THEN test_dk
WHEN 3 THEN test_no
WHEN 4 THEN test_ge
ELSE test_sv
END)
[..]
END
不幸的是,這是行不通的。我收到以下錯誤:
「必須聲明標量變量@marketSpecific
無效的列名test_sv
顯然我誤解CASE如何運作。誰能提供任何見解?
你不能這樣做我害怕。你只能做一組'IF'語句,比如'IF @countryId = 1 SELECT * FROM test_sv ELSE IF @countryId = 2 SELECT * FRMO test_dk etc' – DavidG 2014-09-29 09:42:10
是test_sv,test_dk等表嗎?他們有相同的結構嗎? – schudel 2014-09-29 09:43:46
是的,結構相同。我希望有條件地選擇表的原因是爲了避免重現代碼,因爲我的SELECT語句有些複雜,它會有很多重複的代碼。 – Marcus 2014-09-29 10:33:55