我正在构建一个患者记录导出系统,以便从SQL Server中提取数据。客户需要Excel工作簿形式的数据。
保存数据的方式是动态创建数据库中的表,并根据导出参数更改列名。
我想做的是枚举数据库中的表,然后将这些表(包括列标题)导出(或导入)到Excel中,将这些表导出(或导入)到单个工作簿中的单独工作表中。
所以:-
如果数据库是:
dbo.table1 (name, address, postcode)
dbo.table2 (height, weight, headcirc)我最终得到了一个Excel工作簿:
Sheet1: Name Address Postcode
Sheet2: Height Weight, Headcirc目前,我研究过的每种方法都需要Excel事先知道它所接收的数据的结构。对于给定的导出,不可能预先知道表的数量或这些表中列的名称。
例如,OPENROWSET要求Excel工作簿中存在列标题。SSIS似乎需要到SQL表列和Excel工作簿列的固定映射。
我能想到的唯一另一种方法是使用动态BCP过程将所有表导出到CSV,然后看看是否可以找到某种VBA,使我能够将文件夹中的所有CSV文件作为单独的工作表吸收到单个Excel工作簿中-但这似乎非常笨拙。
我相信这一定是可能的--有人做到了吗?什么方法可以工作?
发布于 2021-03-25 10:50:46
可能有多种方法来做这类事情。其中一些技术可能有效,也可能无效,这取决于您的设置、您安装的Excel和SQL Server的版本、您安装的其他软件等。
1) Export data to existing EXCEL file from SQL Server table
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;',
'SELECT * FROM [SheetName$]') select * from SQLServerTable
2) If you don't want to create an EXCEL file in advance and want to export data to it, use
EXEC sp_makewebtask
@outputfile = 'd:\testing.xls',
@query = 'Select * from Database_name..SQLServerTable',
@colheaders =1,
@FixedFont=0,@lastupdated=0,@resultstitle='Testing details'32位和64位驱动程序:
https://www.microsoft.com/en-us/download/details.aspx?id=13255
您可以在Excel中运行此VBA。
Sub TestMacro()
' Create a connection object.
Dim cnPubs As ADODB.Connection
Set cnPubs = New ADODB.Connection
' Provide the connection string.
Dim strConn As String
'Use the SQL Server OLE DB Provider.
strConn = "PROVIDER=SQLOLEDB;"
'Connect to the Pubs database on the local server.
strConn = strConn & "DATA SOURCE=(local);INITIAL CATALOG=Name_of_your_DB;"
'Use an integrated login.
strConn = strConn & " INTEGRATED SECURITY=sspi;"
'Now open the connection.
cnPubs.Open strConn
' Create a recordset object.
Dim rsPubs As ADODB.Recordset
Set rsPubs = New ADODB.Recordset
With rsPubs
' Assign the Connection object.
.ActiveConnection = cnPubs
' Extract the required records.
.Open "SELECT * FROM Categories"
' Copy the records into cell A1 on Sheet1.
Sheet1.Range("A1").CopyFromRecordset rsPubs
' Tidy up
.Close
End With
cnPubs.Close
Set rsPubs = Nothing
Set cnPubs = Nothing
End Sub或者..。
Sub ADOExcelSQLServer()
Dim Cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim User_ID As String
Dim Password As String
Dim SQLStr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Server_Name = "your_server_name" ' Enter your server name here
Database_Name = "your_database_name" ' Enter your database name here
User_ID = "" ' enter your user ID here
Password = "" ' Enter your password here
SQLStr = "SELECT * FROM Orders" ' Enter your SQL here
Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & _
";Uid=" & User_ID & ";Pwd=" & Password & ";"
rs.Open SQLStr, Cn, adOpenStatic
With Worksheets("Sheet1").Range("A1:Z500")
.ClearContents
.CopyFromRecordset rs
End With
rs.Close
Set rs = Nothing
Cn.Close
Set Cn = Nothing
End Subhttps://stackoverflow.com/questions/66778845
复制相似问题