当前位置: 首页 > 面试题库 >

在Excel VBA中使用数组或字典作为SQL中的FROM子句

何哲
2023-03-14
问题内容

是否可以在SQL语句中使用数组或字典作为表。

例如,strSQL =“ SELECT * FROM”&myArray&“”

提前致谢。


问题答案:

扩展@Nathan_Sav提供的想法,应将以下代码应用于它:

Dim a(3) As String

a(0) = "1 as C1"
a(1) = 2
a(2) = 3
a(3) = 4

Debug.Print "select * from (SELECT " & Join(a, " UNION ALL SELECT ") & ") as tmp"

更新:

这是一个简短的子代码,用于手动连接/构造必要的字符串:

Option Explicit

Sub tmpTest()

Dim strSQL As String
Dim varArray As Variant
Dim lngRow As Long, lngColumn As Long

varArray = ThisWorkbook.Worksheets(1).Range("A1:G12")

strSQL = "select * from "
strSQL = strSQL & "(select "
For lngRow = LBound(varArray, 1) + 1 To UBound(varArray, 1)
    For lngColumn = LBound(varArray, 2) To UBound(varArray, 2)
        'First row must contain column names
        If lngRow = LBound(varArray, 1) + 1 Then
            strSQL = strSQL & varArray(lngRow, lngColumn) & _
                " as [" & varArray(lngRow - 1, lngColumn) & "], "
        Else
            strSQL = strSQL & varArray(lngRow, lngColumn) & ", "
        End If
        'Beyond the last column a UNION ALL SELECT must be added
        '  except for the last row
        If lngColumn = UBound(varArray, 2) And _
            lngRow < UBound(varArray, 1) Then
                strSQL = Mid(strSQL, 1, Len(strSQL) - 2) & _
                    " union all select "
        End If
    Next lngColumn
Next lngRow
strSQL = Mid(strSQL, 1, Len(strSQL) - 2) & ") as tmp"
Debug.Print strSQL

End Sub

上面的代码假定数据在sheet1A1:G12上的第一行包含列标题的范围内。



 类似资料:
  • 问题内容: 我是Python numpy的新手。我试图在我的一个函数中使用numpy数组作为字典中的键,然后Python解释器告诉我numpy数组不可哈希。我刚刚发现,解决此问题的一种方法是使用函数将numpy数组转换为字符串,但这似乎非常昂贵。有没有更好的方法可以达到相同的效果? 更新:我可以创建一个新类来包含numpy数组,这似乎是实现我想要的正确方法。只想知道是否有更好的方法? 更新2:使用

  • 问题内容: 我有以下快速字典 我如何访问数组值? 上面的代码给出了错误“找不到成员下标” 它应该打印“书” 问题答案: 请注意,返回可选的。我们必须强制展开: 或使用可选的链接

  • 问题内容: 我想知道我能否以某种方式使用x,y对作为字典的键 但是我得到了错误: 和错误: 那么..我们怎样才能使其符合标准? 问题答案: 的定义是,即密钥的类型必须符合协议。但是语言指南告诉我们协议可以被类,结构和枚举所采用,即不能被元组所采用。因此,元组不能用作键。 一种解决方法是定义一个包含两个Ints的可哈希结构类型(或您要放入元组的任何内容)。

  • 问题内容: 我想在Django模板的字典中使用变量作为键。我一辈子都无法弄清楚该怎么做。如果我有一个带有名称或ID字段的产品,以及带有该产品ID索引的评级词典,那么我想说: 在python中,这可以通过简单的方式完成 但是我无法使其在模板中工作。我尝试使用…没有骰子。有想法吗? 问题答案: 你需要预先准备数据,在这种情况下,你应该将两元组列表传递给模板:

  • 问题内容: 当然,有一种框架方法可以给定整数,字符串等数组,将它们转换为可在SQL“ ”子句中使用的列表? 例如 会去 问题答案: var inClause = “(“ + String.Join(“,”, values.Select(x => x.ToString()).ToArray()) + “)”; 注意 :您不再需要在.NET Framework 4中调用。添加了一个新方法。

  • 问题内容: 字典键要求符合性: 如何获得纯Swift类实例的地址用作? 问题答案: 可以将相等实现为对象标识,即iff 并引用该类的相同实例,并且可以从构造哈希值(对于相同的对象,该值相同,请比较,例如,使用ObjectIdentifier()和’===’运算子 对于Swift 4.2及更高版本: 对于Swift 3: 对于Swift 2.3及更早版本,您可以使用 即 例: 实施协议。