仅是为了给您我的工作背景,我必须每天从MS Sql提取数据,因此每次都必须转到其他服务器来运行查询。执行查询后,必须粘贴到我的通用驱动器中,这需要很多时间。大约55分钟即可将5,00,000行和30个字段粘贴到通用文件或移动文件。从一个位置移到另一个位置总共需要2个小时。
为减少这种情况,我需要您的帮助才能通过excel使用SQL查询进行以下操作:
如果可能,
Point1:查询将存储在文本文件中的公共位置 Point2:要填充的查询参数 要么 Point2:要为参数定义的范围
如果上面不可能,
根据上述建议,将查询粘贴到要填充的代码和参数中。
连接类型为Windows身份验证,它将基于登录用户的Windows名称工作。
答案 0 :(得分:-1)
此代码将允许您提供在SQL语句中使用的变量,并将其放入电子表格的单元格中(在本例中为Cred2),然后在单独的工作表中返回结果(Sheet2)。
代码的第一部分建立与SQL Server的连接。
Headers列将从第2行开始,然后数据将开始从第3行开始填充。我已经使用它一次提取了100,000条以上的记录,并且工作非常迅速。
Private Sub CommandButton1_Click()
Dim cn As Object
Dim rs As Object
Dim strCon As String
Dim strSQL As String
strCon = "DRIVER=SQL Server;SERVER=ServerName;DATABASE=DBName;Trusted_Connection=True"
Set cn = CreateObject("ADODB.Connection")
cn.Open strCon
' if not a trusted connection you could replace top line of strCon with
strCon = "DRIVER=SQL Server; Server=myServerAddress;Database=myDataBase;User Id=myUsername; Password=myPassword"
' set up where you are getting your variables to include in the SQL statement
stat = Sheets("Cred2").Range("c7").Value
barg = Sheets("Cred2").Range("c10").Value
worksite = Sheets("Cred2").Range("c11").Value
' Construct SQL statement
strSQL = "select * " _
& " FROM tableName A , table2 B " _
& "WHERE A.[field1] = B.[field1] " _
& " and field1 like '" & stat & "'" _
& "and field2 like '" & barg & "'" _
& "and field3 like '" & worksite & "'" _
& " order by Field? "
' Build Record Set
Set rs = CreateObject("ADODB.RECORDSET")
rs.ActiveConnection = cn
rs.Open strSQL
' Display Data
For intColIndex = 0 To rs.Fields.Count - 1
Sheet2.Range("A2").Offset(0, intColIndex).Value = rs.Fields(intColIndex).name
Next
Sheet2.Range("A3").CopyFromRecordset rs
' Close Database
rs.Close
cn.Close
Set cn = Nothing
end sub