2012-07-25 130 views
0

我对Excel中的宏以及如何使用它们有疑问。我最近创建了一个SQL Query,它将打击几个TFS数据库来提取数据。我只是想从excel中运行这个脚本,这样脚本的输出就会自动发布在excel中的各个列标题中。通过使用VB宏,我已经在excel中看到了这一点。在Excel宏中运行SQL脚本

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

为batfile当前代码:

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

+0

你是说所有的SQL行被压缩成一个单一的线?或者每行都在一个列中? – LittleBobbyTables 2012-07-25 15:14:58

+0

@LittleBobbyTables,对不起,我的意思是说每一行都是一列。 – 2012-07-25 15:28:14

+1

事实之后,您应该可以只是将'Data> Text to Columns'。 – LittleBobbyTables 2012-07-25 15:29:56

回答

1

为什么不使用DATAEXTRACTION的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 
+0

我对你提出的答案有疑问。看起来这段代码要求你将脚本加载到sql server上,以便它可以简单地运行,这是否正确?如果是这样,那是不可能的,因为我们不想加载任何额外的存储过程,因为这是内部生产服务器。我希望能够以只读访问的方式从客户机/帐户运行脚本。 – 2012-07-25 17:05:29