Существует ли способ заставить Оператор выбора в SQL провалиться как оператор выбора в C#? То, что я не хочу делать, является примером ниже, но если это - моя единственная опция, я предполагаю, что пойду с ним.
ПРИМЕР:
@NewValue =
CASE
WHEN @MyValue = '1' THEN CAST(@MyValue AS int)
WHEN @MyValue = '2' THEN CAST(@MyValue AS int)
ELSE NULL
END
Править:
Я использую SQL Server.
Чтобы ответить на ваш конкретный вопрос: Нет, не может.
См., например, MySQL документацию для CASE. Каждый КОГДА
должен иметь THEN result
, и нет никакого способа обойти это. THEN
не помечен как необязательный. То же самое относится и ко всем другим СУБД, которые я использовал.
Вот еще один пример: Sql Server's CASE выражение
У вас уже есть хороший альтернативный способ сделать это в виде комментария, поэтому я не буду повторять его здесь.
Я спрашиваю себе два простых вопроса:
тогда это плохое представление. Но
Тогда это хорошая идея.
Я не вижу безправной причины отклонить, скажем, строку интерполяции только потому, что Java и C не имеют его. Если
не является смешным, но я думаю, что начну подпрограмма со случайными
return undef unless <something>;
не так уж и плохо.
-121--3033295-может альтернативно использовать T-SQL Try-Catch. Однако я не уверен, какое негативное влияние это будет на сервере:
SQL:
DECLARE @intVar VARCHAR(MAX), @stringVar VARCHAR(MAX), @default_value INT, @tempVar INT
SET @default_value = NULL
SET @stringVar = 'Hello World!!'
SET @intVar = '550'
PRINT 'Casting @stringVar: '
BEGIN TRY
SET @tempVar = CAST(@stringVar AS INT)
END TRY
BEGIN CATCH
SET @tempVar = @default_value
END CATCH
PRINT @tempVar + 20
PRINT ''
PRINT 'Casting @intVar: '
BEGIN TRY
SET @tempVar = CAST(@intVar AS INT)
END TRY
BEGIN CATCH
SET @tempVar = @default_value
END CATCH
PRINT @tempVar
Вывод: Кастинг @stringvar:
Литье @intvar: 550
Кроме того, я бы создал определенные пользовательские функции для тех, которые попробуйте выявить операторы, которые принимают входную систему varchar, а int default_value, который возвращает целое число.
Смотрите ORMBattle.NET - он точно не ответит на ваш вопрос (btw, вряд ли это возможно), но есть некоторая информация о качестве поддержки LINQ.
Примечание (или отказ от ответственности): Я являюсь одним из лиц, связанных с созданием ORMBattle.NET, а также одним из авторов DataObjects.Net .
-121--4859739-Если вы используете Textmate (mac), вы можете установить этот пакет
В основном jslint, который будет проверять синтаксис JS.
И он содержит некоторые другие вкусности, как различные инструменты сжатия
Вы также можете сделать это так:
@NewValue =
CASE
WHEN @MyValue in ( '1', '2' ) THEN CAST(@MyValue AS int)
ELSE NULL
END
или так:
CASE @MyValue
WHEN '1' THEN CAST(@MyValue AS int)
WHEN '2' THEN CAST(@MyValue AS int)
ELSE null
END
, даже если в этом случае @ MyValue в ('1', '2')
будет иметь больше смысла.