单个查询中的多个连接字符串



在VB中,如何将来自不同技术的两个语句连接到单个记录集?假设我有两个语句:

Select name from server1.dbo.table1 where attribute = "something"
select name from server2.dbo.table2 where attribute = "something else"

我可以运行这些语句。假设table1是一个平面文件,而table2来自SQL Server(或者其他什么,希望不重要)。我想要的是将它们连接到表3中,该表将使用第三种技术创建(碰巧是SAP,但在这个问题中我们忽略它)。我想要一个这样的语句:

select table1.name into server3.dbo.table3 from table1 join table2 on table1.name=table2.name

我可以使用三个单独的连接字符串在一个查询,在VB?

对于这个项目,我可以使用vb.net, vbscript,甚至vba/vb6,无论什么。如果我不得不离开VB,它将使与第三种技术的连接变得更加困难,但并非不可能。另一方面,我是数据访问接口(ado/dao/rdo/ODBC/OLEDB等)不可知的。

我相信你不能直接这么做。通常,在这些情况下,我所做的是在其中一个连接上创建一个临时表,并从另一个连接上导入所有数据。然后执行连接并将数据移动到第三个连接。

Imports System.Data.SqlClient
Module Module1
Sub Main()
    Dim connectionString1 = "YOUR FIRST CONNECTIONSTRING HERE"
    Dim connectionString2 = "YOUR SECOND CONNECTIONSTRING HERE"
    Using connection1 = New SqlConnection(connectionString1)
        connection1.Open()
        Using command = connection1.CreateCommand()
            command.CommandText = "CREATE TABLE #T (Name VARCHAR(64))"
            command.ExecuteNonQuery()
        End Using
        Using connection2 = New SqlConnection(connectionString2)
            connection2.Open()
            Using command = connection2.CreateCommand()
                command.CommandText = "SELECT Name FROM Table2"
                Using reader = command.ExecuteReader()
                    Using bulkCopy = New SqlBulkCopy(connection1)
                        bulkCopy.DestinationTableName = "#T"
                        bulkCopy.BatchSize = 10000
                        bulkCopy.ColumnMappings.Add(0, "Name")
                        bulkCopy.WriteToServer(reader)
                    End Using
                End Using
            End Using
        End Using
        Using command = connection1.CreateCommand()
            command.CommandText = "SELECT Table1.Name FROM Table1 INNER JOIN #T ON Table1.Name = #T.Name"
            Using reader = command.ExecuteReader()
                ' Do what you want with the joined data here, 
                ' if you like you can BulkCopy it on another connection
            End Using
        End Using
    End Using
End Sub
End Module

我可以使用三个单独的连接字符串在一个查询,在VB?

不,你不能。

因为当你运行一个查询(几乎在每一种语言中),你实际上传递一个字符串给驱动程序,它本身将查询实际的数据库。这就是ADO、OLEDB等的目的。

因此,在单个查询中,这是不可能的。

但是,您可以填写两个不同的数据集,每个数据集对应您的技术。

完成后,您可以创建第三个Dataset,它将是前两个Dataset的混合。您可以"手动"构建第三个数据集。

如果您只需要从数据库中读取(SELECT),这是可以的。

如果你想写在那里,你必须报告对第三个数据集所做的任何更改前两个数据集,然后提交这些更改到数据库

相关内容

  • 没有找到相关文章

最新更新