我有一个存储过程,我试图根据提供的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