sql - 使用 Excel 宏 (ADODB) 在 SQL Server 2008 中创建临时表

标签 sql sql-server-2008 vba excel

经过大量谷歌搜索后,我最终得到了以下宏,我希望它能够连接到数据库,删除任何现有的临时表,然后创建一个新表(填充它,并查看结果)。

Dim adoCn As ADODB.Connection
Dim adoRs As ADODB.Recordset
Dim adoCm As ADODB.Command
Dim strSQL As String

Set adoCn = New ADODB.Connection
With adoCn
    .ConnectionString = "Provider=SQLOLEDB;" & _
                        "Initial_Catalog=XXX;" & _
                        "Integrated Security=SSPI;" & _
                        "Persist Security Info=True;" & _
                        "Data Source=XXX;" & _
                        "Extended Properties='IMEX=1'"
    .CursorLocation = adUseServer
    .Open
End With

Set adoCm = New ADODB.Command

With adoCm
    Set .ActiveConnection = adoCn
    .CommandType = adCmdText
    .CommandText = "IF OBJECT_ID('tempdb..#AgedProducts') IS NOT NULL DROP TABLE #AgedProducts"
    .Execute
    .CommandText = "CREATE TABLE #AgedProducts " & _
                   "(Source_Order_Number VARCHAR(255)) " & _
                   "INSERT INTO #AgedProducts VALUES ('AB-123-456') " & _
                   "SELECT * FROM #AgedProducts (NOLOCK) "
    .Execute
End With

Set adoRs = New ADODB.Recordset
With adoRs
    Set .ActiveConnection = adoCn
    .LockType = adLockBatchOptimistic
    .CursorLocation = adUseServer
    .CursorType = adOpenForwardOnly
    .Open "SET NOCOUNT ON"
End With
adoRs.Open adoCm

MsgBox "Recordset returned...", vbOKOnly

While Not adoRs.EOF
    Debug.Print adoRs.Fields(0).Value
    adoRs.MoveNext
Wend

adoCn.Close

Set adoCn = Nothing
Set adoRs = Nothing

当我运行查询时,我收到以下错误消息:

运行时错误“-2147217887 (80040e21)”:

无法支持请求的属性

NOCOUNT 行来自 http://support.microsoft.com/kb/235340(与上面的大部分代码一样)。我添加了 IMEX=1 来考虑订单号可能有多种类型,但我怀疑这就是问题发生的地方。

非常感谢任何帮助!

最佳答案

修改recodset的打开方式,将命令中的select移至recodset打开方法调用。

With adoCm
    Set .ActiveConnection = adoCn
    .CommandType = adCmdText
    .CommandText = "IF OBJECT_ID('tempdb..#AgedProducts') IS NOT NULL DROP TABLE #AgedProducts"
    .Execute
    .CommandText = "CREATE TABLE #AgedProducts " & _
                   "(Source_Order_Number VARCHAR(255)) " & _
                   "INSERT INTO #AgedProducts VALUES ('AB-123-456') "
    .Execute
End With

Set adoRs = New ADODB.Recordset
With adoRs
    Set .ActiveConnection = adoCn
    .LockType = adLockBatchOptimistic
    .CursorLocation = adUseServer
    .CursorType = adOpenForwardOnly

End With
adoRs.Open "SELECT * FROM #AgedProducts (NOLOCK)"

关于sql - 使用 Excel 宏 (ADODB) 在 SQL Server 2008 中创建临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14939766/

相关文章:

sql - 如何使用 WPF 将图像插入数据库

mysql子查询返回多于1行查询错误

sql - 从 SELECT 语句更新列

vba - 在未打开的电子表格中使用 VBA FIND() 函数(或类比)

sql - 位域上 MAX 运算符的替代方法

sql-server - SQL Server 全文搜索包含标点符号的短语,例如IP地址?

sql-server - SQL在不修改原值的情况下更正拼错的单词

excel - 根据各种下拉菜单隐藏/取消隐藏行

Excel VBA 匹配函数内的索引

sql - 使用 Microsoft SQL 的内部连接和正斜杠分隔