我正在继续将可视基本代码迁移到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
答案 0 :(得分:1)
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中并根据需要调用不同的过程。