Sascha Manns Ответов: 1

Как интерпретировать переменную


Я хотел бы интерпретировать переменную, а затем сделать вставку в таблицу MS SQL. Я попробовал код ниже. Но я получаю синтаксическую ошибку. Я следил за информацией по SQL Server: CASE WHEN OR THEN ELSE END => The OR is not supported - переполнение стека[^]

Может быть, кто-нибудь знает, что произошло?

Что я уже пробовал:

CASE '${state.Objektiv}'
    WHEN 'vorne rechts' THEN '2'

    WHEN 'vorne links' THEN '3'

    WHEN 'hinten rechts' THEN '4'

    WHEN 'hinten links' THEN '5'

    WHEN 'Innenraum' THEN '6'

    WHEN 'Navigationsgerät' THEN '7'

    WHEN 'Kombiinstrument' THEN '8'
    
    WHEN 'Fahrzeugdatenträger' THEN '9'
    
    WHEN 'Servicenachweis' THEN '10'
    
    ELSE '11'
END as Bildnummer

Insert into tblFoto (Bildnr) values ('$Bildnummer')        

CHill60

В чем же ошибка?
Кроме того, вы не используете Bildnummer, вы пытаетесь вставить строку '$Bildnummer'

Naga Sindhura

где вы на самом деле ссылаетесь на этот столбец, находится ли он в таблице select part?/ вы пытаетесь сохранить его в переменной? можете ли вы опубликовать полное решение, если это возможно? А также детали ошибки.
Когда "vorne rechts", то " 2 " - что именно это значит? "vorne rechts" относится к названию столбца, а 2 - к позиции столбца?

1 Ответов

Рейтинг:
10

CHill60

Я не знаком с этим форматом '${state.Objektiv}' - это не то, как переменные используются в MSSQL. Видеть Переменные (Transact-SQL) | Microsoft Docs[^].
То $ символ не указан как символ, который будет использоваться в MSSQL - Шпаргалка по символам SQL[^]

Помогает ли вам этот пример -

declare @tblFoto table (Bildnr int) -- You won't need this bit if you already have your table
declare @state_Objektiv varchar(255) = 'Fahrzeugdatenträger'
declare @Bildnummer int

set  @Bildnummer = (SELECT 
CASE @state_Objektiv
    WHEN 'vorne rechts' THEN 2

    WHEN 'vorne links' THEN 3

    WHEN 'hinten rechts' THEN 4

    WHEN 'hinten links' THEN 5

    WHEN 'Innenraum' THEN 6

    WHEN 'Navigationsgerät' THEN 7

    WHEN 'Kombiinstrument' THEN 8
    
    WHEN 'Fahrzeugdatenträger' THEN 9
    
    WHEN 'Servicenachweis' THEN 10
    
    ELSE 11
END)

insert into @tblFoto (Bildnr) values (@Bildnummer)
select * from @tblFoto


EDIT - @Naga-Sindhura указал, что это длинный список условий, которые, вероятно, лучше обрабатываются с помощью табличной переменной. напр.
declare  @references table (Beschreib nvarchar(255), bildnr int)
insert into @references (Beschreib, bildnr) values
('vorne rechts',  2),
('vorne links',  3),
('hinten rechts',  4),
('hinten links',  5),
('Innenraum',  6),
('Navigationsgerät',  7),
('Kombiinstrument',  8),
('Fahrzeugdatenträger',  9),
('Servicenachweis',  10)
Обратите внимание, что я не добавил запись для условия ELSE (11).
Тогда вы можете сделать что-то вроде
declare @tblFoto table (Bildnr int)
declare @state_Objektiv varchar(255) = 'FahrzeugdatenträgerXXX'
declare @Bildnummer int = (SELECT bildnr from @references WHERE Beschreib = @state_Objektiv)
insert into @tblFoto (Bildnr) values (ISNULL(@Bildnummer,11))
select * from @tblFoto
Обратите внимание на использование ISNULL чтобы справиться с тем, что было еще условием


Naga Sindhura

слишком много операторов when, лучше использовать синтаксис табличных переменных. А ты как думаешь?

CHill60

Да - хорошая мысль. Я добавлю что-нибудь в раствор.

Sascha Manns

Это прекрасно работает. Большое спасибо.

CHill60

Может быть, избиратель с низким голосованием даст мне знать, где я ошибаюсь в своем решении? Я тоже здесь, чтобы учиться.

Я так и думал.