2010-06-16 5 views
1

У меня есть различные проекты VB6, которые я поддерживаю с некоторыми запросами, передаваемыми на сервер с «ELSE:» с двоеточием, используемым в операторах case.SQL Server Query с «ELSE:»

Мне интересно, может ли кто-нибудь сказать мне, для чего используется ** двоеточие? Он вызывает ошибки в SQL2005 и выше, но SQL2000 работает без каких-либо жалоб.

Я хотел бы просто удалить его из кода & повторной компиляции, но я боюсь, что сломает 10 других вещей в приложении ..

Заранее спасибо ...

ответ

0

Почему бы не удалить его, перекомпилировать и проверить приложение, чтобы узнать, какое влияние оно может иметь?

+0

Поскольку ELSE используется в операторах case SQL, чтобы поймать все, что не было сопоставлено - потенциально большая часть инструкции SQL. –

+2

@ rlb.usa: Я знаю, что делает ELSE. Однако, если его заявленный вариант заключается в том, что он хочет удалить его, но не уверен в его влиянии, то по определению он ДОЛЖЕН удалить его и проверить воздействие. Это способ учиться. – NotMe

+1

Наверное, я в конечном итоге все равно сделаю. Или, возможно, перейдите к коду, где вызывается вызов, скопируйте SQL, сгенерированный кодом, и попробуйте в Enterprise Manager, чтобы узнать, что произойдет. –

0

Хм, это вызывает ошибки в SQL2005?

В SQL-сервере ELSE используется в операторах case, чтобы поймать все, что еще не было обнаружено (оно относится к вещам, которые «провалили» все остальные случаи). For example, предположим, что мы хотели бы перечислить некоторые элементы из базы данных цен и классифицировать их с помощью специального столбца «Бюджет», поэтому для каждого элемента мы рассмотрим его цену и зададим значение «Бюджет»:

SELECT title, price, 
     Budget = CASE price 
     WHEN price > 20.00 THEN 'Expensive' 
      WHEN price BETWEEN 10.00 AND 19.99 THEN 'Moderate' 
      WHEN price < 10.00 THEN 'Inexpensive' 
      ELSE 'Unknown' 
     END, 
FROM titles 

ELSE здесь ловит все, что действительно не подпадает под «дорогой» или «умеренный» или «недорогой». Удаление этих ELSE здесь обязательно испортит ваши запросы.

+0

Да, я знаю, как работает другое ... Код (я унаследовал. Я не написал это, я его поддерживаю ...) Конечно, если я выберу ELSE, он будет работать по-другому. Мой вопрос о КОЛОНЕ. Почему это так и в чем его цель? –

+0

Его проблема не в том, что ELSE это с ELSE: обратите внимание на двоеточие, которое вызывает проблему sql в более поздних версиях sql. – NotMe

+0

О, в этом случае я согласен с @Chris_Lively, это синтаксис, а не семантика. –

4

Здесь дело. Кто-то использовал ключевое слово ELSE в качестве кода в коде.

Слово в TSQL, за которым следует двоеточие, является меткой. Вот пример:

DECLARE @Count int 
SET @Count = 0 

ONE_MORE_TIME: 
IF @Count <> 33 
    PRINT ‘Hello World’ 
    SET @Count = @Count + 1 
END 

IF @Count <> GOTO ONE_MORE_TIME 

В вашем случае, метка может быть «ELSE»

DECLARE @Count int 
SET @Count = 0 

ELSE: 
IF @Count < 33 
    PRINT ‘Hello World’ 
    SET @Count = @Count + 1 
END 

IF @Count < 33 GOTO ELSE 

У меня есть ощущение, что этот код собирается быть сильно изрезана, а также. Я почти готов наложить на это немного денег.

+0

Возможно, это тоже. Надеюсь, что хотя ... NOw Мне нужно искать GOTO ELSE? Наряду с ужасным отступлением, теперь мы зарезервировали слова для тегов ... Я сдаюсь .. –

+0

Или они, возможно, случайно использовали ELSE в качестве ярлыка и просто не понимали, что Else не работает должным образом. Но да, я бы искал заявления GOTO Else. – HLGEM

+0

+1. Это делает абсолютный смысл. Я так долго не использовал этикетки, я забыл, что это был даже вариант. – NotMe