【问题标题】:SQL in Excel: Cannot call declared variableExcel 中的 SQL:无法调用声明的变量
【发布时间】:2021-06-27 14:43:55
【问题描述】:

我试图在 Excel VBA 中分解我的 SQL 字符串,将我的变量存储在 SQL 的第一部分,并在第二部分调用它们。看来声明的变量不是我这里的朋友?

第一部分(声明我的变量)

Dim rst As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim sSQL As String

Set rst = New ADODB.Recordset
rst.CursorLocation = adUseClient
rst.LockType = adLockReadOnly
Set cnn = New ADODB.Connection
cnn.CommandTimeout = GCL_dbTimeout

cnn.Open "XXX"
rst.ActiveConnection = cnn

sSQL = "DECLARE @Id AS INT = 1234 ; SELECT @Id AS [Id] INTO #cte_TEMP;"
cnn.Execute (sSQL)

第二部分(调用我的变量)

使用临时表有效:

rst.Open "SELECT * FROM #cte_TEMP;"

但调用变量不会:

rst.Open "SELECT @Id;"

【问题讨论】:

    标签: sql sql-server excel vba


    【解决方案1】:

    内存中的@variables 仅在执行单个命令期间在作用域内;一旦rst.Open 返回,变量就消失了,不再存在。

    通过将其存储到#temp 表中,您将值持久化到物理磁盘存储中,从而使其可用于其他后续命令。

    别忘了在某一时刻DROP TABLE #cte_TEMP;! :)

    注意:#temp 表只能由创建它的用户访问。如果您需要从不同的连接字符串访问它,则需要改用##temp 表。

    【讨论】:

    • 这让我很伤心,因为我非常喜欢使用@variable。无论如何,谢谢。
    • @twenty49 然后考虑在创建变量的同一命令中使用变量,如果可能的话。从您的帖子中不清楚为什么它们需要是单独的命令。
    猜你喜欢
    • 2011-12-26
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2020-08-17
    相关资源
    最近更新 更多