15

C# の case ステートメントのように、SQL で CASE ステートメントを失敗させる方法はありますか? 私がやりたくないのは以下の例ですが、それが私の唯一の選択肢である場合は、それを使用すると思います。

例:

@NewValue =
   CASE
      WHEN @MyValue = '1' THEN CAST(@MyValue AS int)
      WHEN @MyValue = '2' THEN CAST(@MyValue AS int)
      ELSE NULL
   END

編集:

SQL Server を使用しています。

4

3 に答える 3

15

特定の質問に答えるには: いいえ、できません。

たとえば、CASE の MySQL ドキュメントを参照してください。すべてにWHENが必要THEN resultであり、これを回避する方法はありません。はTHENオプションとしてマークされていません。同じことが、私が使用した他のすべての RDBMS にも当てはまります。

別の例を次に示します。Sql Server の CASE 式

コメントとして投稿された別の良い方法が既にあるので、ここでは繰り返しません。

于 2010-01-22T20:12:30.017 に答える
4

次のようにすることもできます。

@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 in ('1','2')方が理にかなっています。

于 2010-01-22T20:10:51.597 に答える
-1

代わりに、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 inputString と整数を返す int default_value を受け入れる try catch ステートメント用のユーザー定義関数を作成します。

于 2010-01-22T20:22:20.537 に答える