VB,T-SQL:如何将Select Case转换为正确的T-SQL(2012)语法

时间:2016-06-22 21:19:45

标签: sql vba tsql vb6

我正在继续将可视基本代码迁移到SQL存储过程。这是我第一次做的事情,我不确定转换代码时的最佳做法或方法是什么。

我正在处理Select Case语句。它取决于输入字符串的最左边或最右边的字符的值,根据这些值,确定INSERT语句的源SELECT部分​​。

我想知道我是否可以获得一些编码帮助,这可以帮助我入手,或者建议如何通过T-SQL代码有效地管理它。任何帮助都表示赞赏。

这是VB Select Case语句的模板:

    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

1 个答案:

答案 0 :(得分:1)

VB中的

CASE用于控制逻辑流,T-SQL中的CASE是用于返回单个值的表达式;尽管他们有共同的名字,但两者并不相同。

您可以使用IF/ELSE代替SELECT CASE将您拥有的内容移植到SQL。如果在字符串中构建语句而不使用动态SQL / sp_ExecuteSQL,则不能完全复制它,而是在SP中使用完整的内联语句:

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

另一种方法是将逻辑保留在B中并根据需要调用不同的过程。