Sql server 在Excel VBA中存储SQL Server查询以加入

Sql server 在Excel VBA中存储SQL Server查询以加入,sql-server,tsql,vba,adodb,Sql Server,Tsql,Vba,Adodb,我在VBA代码中使用ADODB从SQL Server选择数据,我想加入几个查询 假设我有两个问题: query1 = _ "select tblA.x,tblB.y from tblA inner join tblB on tblA.x=tblB.x" query2 = _ "select tblA.x,tblA.abc from tblA inner join " & _ "(select max(tblA.x) as maxX from tblA group by x) qryA

我在VBA代码中使用ADODB从SQL Server选择数据,我想加入几个查询

假设我有两个问题:

query1 = _
"select tblA.x,tblB.y from tblA inner join tblB on tblA.x=tblB.x"

query2 = _
"select tblA.x,tblA.abc from tblA inner join " & _
"(select max(tblA.x) as maxX from tblA group by x) qryA on tblA.x=qryA.maxX"
我正在运行以下查询:

Public sub getRecordsets(objConn as ADODB.Connection,rs1 as ADODB.Recordset,rs2 as ADODB.Recordset)

rs1.Open query1, objConn
rs2.Open query2, objConn

End Sub
我想在第三个记录集中加入这两个查询。我知道我可以编写一条连接两个查询的长SQL语句,但我希望将它们分开,以使代码更易于维护

如果我使用MS Access,我将创建两个存储查询
query1
query2
,然后按如下方式从中选择:

select y,abc from query1 inner join query2 on query1.x=query2.x

有没有办法加入记录集?我没有在SQL Server数据库中创建UDF或视图的写入权限;如果我能够获得写访问权限,我就必须这样做吗?

如果我是你,我会在SQL Server上执行所有查询,特别是其中包含连接的查询,因为SQL Server可以更快、更高效地处理连接。通过这种方式,您将只向前移动实际需要的记录,而不是移动所有记录,然后在访问时对其进行过滤。

您不能加入记录集,因为这已经是客户端的数据结构。这就是穆罕默德·阿里想要说的,你应该在服务器上执行完整的查询。(因为处理记录集的时间太晚了)

以您希望的方式构建它是另一回事,尽管您最终会合并SQL语句,这是一种解析器/语法的东西,而且更具学术性

事实上——我们将看看这个条目是否能保存足够长的时间——我已经看到了你们那边的很多问题,这些问题既有趣又聪明,但也有些不同寻常。这迫使我发表评论,所以你可能会批评我


总的来说,我想说netoffice可以让你的生活轻松很多

“在SQL Server上”执行查询是什么意思?编写一条大型SQL语句并将其传递给
记录集.open()
?我正试图找到一种方法将其组织为一组我可以加入的子查询,这样就可以很容易地更改或重用这些查询组件。您是否考虑过使用
UNION ALL
和单个查询?为什么您想要一个记录集而不是两个单独的记录集?@TimWilliams,我不想要每个查询中的行的并集,我想要在它们的公共键上连接它们:
query1.x=query2.x
,这样我就可以看到哪个
y
值与哪个
abc
值匹配。