Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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 单个查询中的多个连接字符串_Sql_Vb.net_Connection String - Fatal编程技术网

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

Sql 单个查询中的多个连接字符串,sql,vb.net,connection-string,Sql,Vb.net,Connection String,在VB中,如何将来自不同技术的两条语句连接到一个记录集中?假设我有两个陈述: Select name from server1.dbo.table1 where attribute = "something" select name from server2.dbo.table2 where attribute = "something else" 我可以运行这些语句中的每一个。假设table1是一个平面文件,table2来自SQL Server或其他什么,希望没有关系。我想要做的是将它们加入

在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中,表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等的用途

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

但是,您可以填写两个不同的数据集,每种技术一个

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

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


如果要在其中写入,则必须将第三个数据集上所做的任何更改报告给前两个数据集,然后将这些更改提交到数据库。

您需要连接技术本身,还是可以查询每个数据源并将结果合并到内存中?如果您有两个或多个同一类/类型的集合,则始终可以将它们合并到单个集合中。因此,您希望将这两个表合并到第三个表Table1+Table2=Table3中,但Table3位于不同的DBMS中?@David谢谢。如果这有助于您理解的话:表1可能有大约40K条“记录”,可能是以制表符或逗号分隔的。表2可能有大约100K条记录,采用某种结构化表格格式。我不需要出于任何原因连接这些技术,只需要尝试将表1和表2的大约35K条记录中的信息传输到表3中,以便使用不同的过程在表3的技术中获取信息并完成它的工作。所以,回答你们的问题:后者。不。为了完整性,我知道我可以用一个循环迭代数万次。。。但我不认为说我不想是不合理的。下面两个似乎都是很好的答案;我被另一个客户转移了注意力。在我尝试完这两个想法后,我会接受其中一个。由于我的特殊技术,临时表比另一个建议更容易。非常感谢。