在Excel宏中运行SQL脚本

在Excel宏中运行SQL脚本,sql,excel,vba,Sql,Excel,Vba,关于Excel中的宏以及如何使用宏,我有一个问题。我最近创建了一个SQL查询,它将访问几个TFS数据库以提取数据。我只想从excel运行这个脚本,这样脚本的输出就会自动发布在excel中,并带有单独的列标题。我以前在excel中看到过使用VB宏完成此操作 作为一种解决方法,我创建了一个小bat文件来运行sqlcmd,检查包含脚本的sql文件,最后将输出推送到csv文件。唯一的问题是,CSV的输出将结果推到一行中,并且没有用标题分隔它们 batfile的当前代码: sqlcmd-E-S TFSSe

关于Excel中的宏以及如何使用宏,我有一个问题。我最近创建了一个SQL查询,它将访问几个TFS数据库以提取数据。我只想从excel运行这个脚本,这样脚本的输出就会自动发布在excel中,并带有单独的列标题。我以前在excel中看到过使用VB宏完成此操作

作为一种解决方法,我创建了一个小bat文件来运行sqlcmd,检查包含脚本的sql文件,最后将输出推送到csv文件。唯一的问题是,CSV的输出将结果推到一行中,并且没有用标题分隔它们

batfile的当前代码:


sqlcmd-E-S TFSServer\TFS2010-ic:\test\testquery.sql-o C:\test\test.csv

为什么不使用ssis包或ssrs报告进行数据提取?宏是如此。。。上个世纪

如果您坚持使用宏,下面是一个示例:

Dim con As ADODB.Connection, _
cmd As ADODB.Command, _
rs As ADODB.Recordset, _
strSQL As String, _
i As Integer

strSQL = "EXEC SP_StoredProcedureToGetData"

Set con = New ADODB.Connection
con.Open "Provider=SQLOLEDB;Data Source=SQLSERVER;" & _
    "Initial Catalog=DATABASE;User ID=USERNAME;Password=PASSWORD"

Set cmd = New ADODB.Command
With cmd
    .ActiveConnection = con
    .CommandText = strSQL
    .CommandType = adCmdStoredProc
End With

Set rs = New ADODB.Recordset
With rs
    .CursorLocation = adUseClient
    .CursorType = adOpenKeyset
    .LockType = adLockBatchOptimistic
End With
Set rs = cmd.Execute

Cells(1, 1) = "Column1"
Cells(1, 2) = "Column2"
Cells(1, 3) = "Column3"
Cells(1, 4) = "Column4"
Cells(1, 5) = "Column5"
Cells(2, 1).CopyFromRecordset rs

Set con = Nothing
Set cmd = Nothing
Set rs = Nothing

你是说所有的SQL行都被压缩成一行吗?或者每一行都在一列中?@littlebbytables,很抱歉,我的意思是每一行都是一列。你应该可以在事后执行
Data>Text-to-Columns
。@littlebbytables,谢谢!我对你提出的答案有个问题。这段代码似乎要求您将脚本加载到sql server上,以便它可以简单地运行,对吗?如果是这样,那是不可能的,因为我们不想加载任何额外的存储过程,因为这是一个内部生产服务器。我希望能够从具有只读访问权限的客户机/帐户运行脚本。