У меня есть хранимая процедура, в которой я пытаюсь условно выбрать конкретную таблицу в зависимости от предоставленного параметра 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
Invalid имя столбца test_sv
Очевидно, я неправильно понял, как работает СЛУЧАЙ. Может ли кто-нибудь дать представление?
Вы не можете этого сделать, я боюсь. Вы могли бы выполнять только набор операторов 'IF', таких как' IF @countryId = 1 SELECT * FROM test_sv ELSE IF @countryId = 2 SELECT * FRMO test_dk и т. Д. – DavidG
- это таблицы test_sv, test_dk etc? они имеют одинаковую структуру? – schudel
Да, та же структура. Причина, по которой я хотел выбрать таблицу условно, заключалась в том, чтобы избежать воспроизведения кода, что было бы альтернативой операторам IF/ELSE, и поскольку мой оператор SELECT несколько сложный, было бы много дублированного кода. – Marcus