Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从电子表格单元格内部运行SQL查询_Sql Server_Excel_Tsql_Scripting - Fatal编程技术网

Sql server 从电子表格单元格内部运行SQL查询

Sql server 从电子表格单元格内部运行SQL查询,sql-server,excel,tsql,scripting,Sql Server,Excel,Tsql,Scripting,我有一个Excel电子表格,其中有几个SQL查询存储在不同的单元格中,我希望在SQL Server上执行这些查询以生成一个新的工作表,其中每个单元格都是原始电子表格的查询结果。这背后的想法是在生成结果时保留工作表格式(条件格式等) 大概是这样的: 输入电子表格: 数据库 信息A 信息B 数据库1 SQL查询1 SQL查询2 数据库2 SQL查询3 SQL查询4 我已经用电源查询完成了。这比我想象的要容易得多。特别感谢Jacek Wróbel在评论中提供了这个想法。顺便说一句,你可以这样做 Sub

我有一个Excel电子表格,其中有几个SQL查询存储在不同的单元格中,我希望在SQL Server上执行这些查询以生成一个新的工作表,其中每个单元格都是原始电子表格的查询结果。这背后的想法是在生成结果时保留工作表格式(条件格式等)

大概是这样的:

输入电子表格:

数据库 信息A 信息B 数据库1 SQL查询1 SQL查询2 数据库2 SQL查询3 SQL查询4
我已经用电源查询完成了。这比我想象的要容易得多。特别感谢Jacek Wróbel在评论中提供了这个想法。

顺便说一句,你可以这样做

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 = "EXCEL-PC\SQLEXPRESS" ' Enter your server name here
    Database_Name = "Northwnd" ' 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 Sub
它位于VBA模块中。当然,您可以将SQL存储在Excel单元格中,然后执行此操作

SQLStr = Worksheets("Sheet1").Range("A1").Value
此外,还可以循环遍历一组单元格并运行一组SQL作业


你自己的想象力是你唯一的限制。

这听起来像是一个错误。在Excel工作表的单元格中进行查询将很容易使您遇到各种安全问题。使用Excel电子表格的主要思想是将所有查询结果插入到已预格式化的工作表中(使用条件格式规则等)。我不一定需要从excel内部运行查询,但我确实需要保留输出的工作表格式。你现在的问题太宽泛了。您应该集中精力并尝试一些东西。这看起来像是Power Query的场景。您可以尝试使用它从多个数据源获取数据,并将其组合到有用的结果集中。在结果集之上,您可以在excel电子表格中创建Presentation层。@JacekWróbel是的,看起来Power Query就是答案。我现在已经让它运行了,它做得很好。