Я пытаюсь преобразовать это в использование инструкции CASE вместо инструкции IF, но я получаю «неправильный синтаксис около Set».Анализ значения IPv4 с использованием оператора CASE
Его на первом SET:
WHEN 1 THEN
SET @firstOctet = CAST(SUBSTRING(@WorkingNullRouteIP, 1, @lastOctet - 1))
DECLARE @lastOctet int,
@octetCount int,
@firstOctet int = -1,
@secondOctet int = -1,
@thirdOctet int = -1,
@fourthOctet int = -1
DECLARE @WorkingNullRouteIP varchar(50)
SET @WorkingNullRouteIP = @a_NullRouteIP
WHILE (CHARINDEX('.',@WorkingNullRouteIP, @lastOctet) > 0)
BEGIN
SET @lastOctet = CHARINDEX('.',@WorkingNullRouteIP, @lastOctet)
SET @octetCount = @octetCount + 1
If @octetCount = 1
BEGIN
SET @firstOctet = CAST(SUBSTRING(@WorkingNullRouteIP, 1, @lastOctet - 1))
END
If @octetCount = 2
BEGIN
SET @secondOctet = CAST(SUBSTRING(@WorkingNullRouteIP, 1, @lastOctet - 1))
END
If @octetCount = 3
BEGIN
SET @thirdOctet = CAST(SUBSTRING(@WorkingNullRouteIP, 1, @lastOctet - 1))
END
SET @WorkingNullRouteIP = SUBSTRING(@WorkingNullRouteIP, @lastOctet + 1)
SET @lastOctet = 1
END
-- Converting to this:
WHILE (CHARINDEX('.',@WorkingNullRouteIP, @lastOctet) > 0)
BEGIN
SET @lastOctet = CHARINDEX('.',@WorkingNullRouteIP, @lastOctet)
SET @octetCount = @octetCount + 1
SELECT CASE @octetCount
WHEN 1 THEN
SET @firstOctet = CAST(SUBSTRING(@WorkingNullRouteIP, 1, @lastOctet - 1))
WHEN 2 THEN
SET @secondOctet = CAST(SUBSTRING(@WorkingNullRouteIP, 1, @lastOctet - 1))
WHEN 3 THEN
SET @thirdOctet = CAST(SUBSTRING(@WorkingNullRouteIP, 1, @lastOctet - 1))
END
SET @WorkingNullRouteIP = SUBSTRING(@WorkingNullRouteIP, @lastOctet + 1)
SET @lastOctet = 1
END
Это выглядит, как вы пытаетесь сломать IP-адрес в 4 октета? Вы посмотрели на PARSENAME? –
Оператор case может возвращать только значение, он не может управлять потоком, поэтому он не может содержать команды типа SET. –
@TabAlleman: Чтобы уточнить - оператор CASE * действительно является выражением CASE *, с соответствующими ограничениями. –