2016-06-22 7 views
0

Visual BasicコードをSQLストアドプロシージャに移行し続けます。これは初めてのことですが、コードを変換するときのベストプラクティスまたはアプローチのようにはわかりません。VB、T-SQL:Select Caseを適切なT-SQL(2012)構文に変換する方法

私は現在Select Caseステートメントを扱っています。これらの値に基づいて、入力ストリングの左端または右端の文字の値に依存し、INSERTステートメントのソースSELECT部分​​が決定されます。

T-SQLコードで効率的に管理できるようにするために、コーディングの助けを得ることができるかどうか、またはじめて役立つものがあるかどうかは疑問でした。どんな援助も感謝しています。ここで

はVB Select Caseステートメントのテンプレートです:VBで

Select Case Left(ID, 2) 

    Case "MN"           

     QSQL = "INSERT INTO table " 

     Select Case Right(PID, 2)       

      Case "LC", "LS", "LM" 

       QSQL = QSQL & "SELECT columns " 
          & "FROM table " _ 
          & "WHERE ((column) = '" & ID & "'));" 

      Case Else 

       If Mid(ID, 3, 1) <> "0" Then 

        QSQL = "INSERT INTO table " 
        QSQL = QSQL & "SELECT columns" 
        QSQL = QSQL & "FROM table WHERE column ='" & PID & "';" 

       Else 

        If InStr(PID, "_") = 10 Then          

         QSQL = QSQL & "SELECT columns " 
         QSQL = QSQL & "FROM table" 
         QSQL = QSQL & "WHERE column = '" & ID & "';" 
        Else 

         QSQL = QSQL & "SELECT columns " 
         QSQL = QSQL & "FROM table " 
         QSQL = QSQL & "WHERE column = '" & ID & "';" 
        End If 

       End If 

     End Select 

    Case "CL" 

    Case "GT" 

    Case "SC" 

    Case "MS" 

    Case Else 

End Select 
+0

SQLのCASE構文がわかっているなら、それは前方にあるべきです。これに特別なことは何ですか?これまでのクエリは試しましたか? – FLICKER

答えて

1

CASE論理フローの制御のために、T-SQLでCASEは、単一の値を返すために意図表現です。その2つはその共有名にもかかわらず同等ではありません。

SELECT CASEの代わりにIF/ELSEを使用して、必要なものをSQLに移植することができます。代わりに、正確にあなたが文字列内のステートメントを構築するような動的SQL/sp_ExecuteSQLを使用せずに、それを複製し、あなたのSPに完全なインライン文を使用することはできません。

IF (RIGHT(@PID, 2) IN ('LC', 'LS', 'LM')) 
    INSERT INTO TABLE SELECT COLUMNS ... WHERE COLUMN = @ID 
ELSE IF ... 

代替はBのロジックを維持し、必要に応じて異なるプロシージャを呼び出すことであろう。

+0

あなたの答えをありがとう、それは非常に有用です。あなたが見てみると、VB CaseはSelect Case Left(ID、2)Case "MN"で始まり、そのケース内に別のものがあります。Select Case Right(PID、2)Case "LC "、" LS "、" LM "である。これらはIF/ELSEを使用してどのように行われますか?ネストされた選択肢ですか?ありがとうございました。 –

関連する問題