首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:动态SQL

:动态SQL
EN

Stack Overflow用户
提问于 2017-04-18 19:36:56
回答 2查看 1.2K关注 0票数 0

在函数内部,我使用一个字符串来运行sql。我需要改变一些依赖于用户选择的字符串。为了简洁起见,我只从每个表中包含了一个字段。而且,这些不是真正的表名。

代码语言:javascript
复制
strSQL = "DELETE * FROM tblWax"
db.Execute strSQL, dbFailOnError

strSQL = "INSERT INTO tblWax ( strPortName, lngShortSet ) " & _
         "SELECT tblAAA.strPastName, tblBBB.lngShortID " & _
         "FROM tblAAA INNER JOIN tblBBB ON tblAAA.Parameter = tblBBB.Parameter"
db.Execute strSQL, dbFailOnError

根据用户的选择,我想用tblSSS代替tblBBB,使用相同的选择(在字段strChoice中),tblWax需要是tblHat。即:如果strChoice = 1,则tblWax,tblAAA,tblBBB如果strChoice = 2,则tblHat,tblAAA,tblSSS

否则,字符串的其余部分是相同的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-19 19:00:21

要扩展@Smandoli和@Gustav的答案,请使用字符串变量作为表名。这使您可以创建多个案例,而不会在SQL字符串中丢失变量名称。

代码语言:javascript
复制
Select Case strChoice

    Case 1:
        strTarget = "tblWax"
        strJoin = "tblBBB"

    Case 2:
        strTarget = "tblHat"
        strJoin = "tblSSS"

end select

strSQL = "DELETE * FROM " & strTarget
db.Execute strSQL, dbFailOnError

strSQL = "INSERT INTO " & strTarget & " ( strPortName, lngShortSet ) " & _
         "SELECT tblAAA.strPastName, " & strJoin & ".lngShortID " & _
         "FROM tblAAA INNER JOIN " & strJoin & _
         " ON tblAAA.Parameter = " & strJoin & ".Parameter"

db.Execute strSQL, dbFailOnError
票数 2
EN

Stack Overflow用户

发布于 2017-04-18 19:44:16

只需使用条件逻辑,如VBA的SELECT...CASE

代码语言:javascript
复制
Select Case strChoice

   Case 1
      strSQL = "DELETE * FROM tblWax"
      db.Execute strSQL, dbFailOnError

      strSQL = "INSERT INTO tblWax ( strPortName, lngShortSet ) " & _
               "SELECT tblAAA.strPastName, tblBBB.lngShortID " & _
               "FROM tblAAA INNER JOIN tblBBB ON tblAAA.Parameter = tblBBB.Parameter"

   Case 2
      strSQL = "DELETE * FROM tblHat"
      db.Execute strSQL, dbFailOnError

      strSQL = "INSERT INTO tblHat ( strPortName, lngShortSet ) " & _
               "SELECT tblAAA.strPastName, tblSSS.lngShortID " & _
               "FROM tblAAA INNER JOIN tblSSS ON tblAAA.Parameter = tblSSS.Parameter"

End Select

db.Execute strSQL, dbFailOnError

您甚至可以在一种情况下使用多个值。

代码语言:javascript
复制
Case 1, 3, 5
...
Case 2, 4, 6
...

并将Else用于其他不跟随其他Case语句的语句。

代码语言:javascript
复制
Case Else
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43480760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档