Невозможно. Может быть, кто-то докажет, что я ошибаюсь ... Какой код вы хотите запустить? Вы хотите автоматическое сохранение при нажатии кнопки «Отмена»? Это звучит контр-интуитивно. Если вы еще не автосохранение, я думаю, что нет смысла автоматически сохранять, когда они нажимают «Отмена». Возможно, вы могли бы выделить кнопку сохранения в вашем обработчике onbeforeunload, чтобы пользователь увидел, что им нужно сделать, прежде чем перемещаться.
declare @locationType varchar(50);
declare @locationID int;
SELECT column1, column2
FROM viewWhatever
WHERE
@locationID =
CASE @locationType
WHEN 'location' THEN account_location
WHEN 'area' THEN xxx_location_area
WHEN 'division' THEN xxx_location_division
END
Здесь Вы идете.
SELECT
column1,
column2
FROM
viewWhatever
WHERE
CASE
WHEN @locationType = 'location' AND account_location = @locationID THEN 1
WHEN @locationType = 'area' AND xxx_location_area = @locationID THEN 1
WHEN @locationType = 'division' AND xxx_location_division = @locationID THEN 1
ELSE 0
END = 1
Я сказал бы, что это - индикатор дефектной структуры таблицы. Возможно, различные типы местоположения должны быть разделены в различных таблицах, позволив Вам сделать намного более богатые запросы и также постараться не иметь лишние столбцы вокруг.
, Если Вы неспособны изменить структуру, что-то как ниже могло бы работать:
SELECT
*
FROM
Test
WHERE
Account_Location = (
CASE LocationType
WHEN 'location' THEN @locationID
ELSE Account_Location
END
)
AND
Account_Location_Area = (
CASE LocationType
WHEN 'area' THEN @locationID
ELSE Account_Location_Area
END
)
И т.д... Мы не можем изменить структуру запроса на лету, но мы можем переопределить его, заставив предикаты равняться себе.
РЕДАКТИРОВАНИЕ: вышеупомянутые предложения, конечно, намного лучше, просто игнорируют мой.
Проблема с этим состоит в том, что, когда механизм SQL идет для оценки выражения, он проверяет ОТ части для получения по запросу надлежащих таблиц, и затем, ГДЕ часть для обеспечения некоторых основных критериев, таким образом, он не может правильно оценить динамическое условие на который столбец проверить по.
можно использовать оператор Where, когда Вы проверяете, КУДА критерии в предикате, такой как
WHERE account_location = CASE @locationType
WHEN 'business' THEN 45
WHEN 'area' THEN 52
END
так в Вашем особом случае, Вы собираетесь должны поместить запрос в хранимую процедуру или создать три отдельных запроса.
без оператора case ...
SELECT column1, column2
FROM viewWhatever
WHERE
(@locationType = 'location' AND account_location = @locationID)
OR
(@locationType = 'area' AND xxx_location_area = @locationID)
OR
(@locationType = 'division' AND xxx_location_division = @locationID)