使用2个数据库执行sql查询

时间:2011-02-22 20:49:47

标签: c# sql

我的查询如下:

INSERT INTO [NewModel.Persistence.PersistencyContext].[dbo].[NewPerson] (
    [Name], 
    [Location], 
    [LastUpdate]
    )
SELECT 
    MIN([name]), 
    MIN([location]), 
    MIN([time])
FROM [OldModel.Persistence.PersistencyContext].[dbo].[ExPerson]
GROUP BY name

如何定义连接字符串以及执行此查询的c#代码是什么?

2 个答案:

答案 0 :(得分:2)

这里有两件事。

首先,如果您的数据库位于同一个sql server实例上(实际上是在sql实例下运行的同一个数据库的两个不同版本),那么您将不需要拥有链接服务器。

但是,如果它们在不同的服务器(可能是不同的机器)上运行,那么您需要按照Oded和David的说明链接它们。

我会创建一个存储过程并根据需要从代码中调用它。

CREATE PROC usp_AddMyRecords

AS
BEGIN  
INSERT INTO [NewModel.Persistence.PersistencyContext].[dbo].[NewPerson] (  
    [Name],   
    [Location],   
    [LastUpdate]  
    )  
SELECT   
    MIN([name]),   
    MIN([location]),   
    MIN([time])  
FROM [OldModel.Persistence.PersistencyContext].[dbo].[ExPerson]  
GROUP BY name  

END

C#代码调用程序:

SqlConnection dbConnection = new SqlConnection(ConfigurationManager.ConnectionStrings
                                     [YOUR_CONNECTION_STRING_NAME].ConnectionString);  
SqlCommand cmd = new SqlCommand();  
cmd.CommandText = "usp_AddMyRecords";  
cmd.CommandType = CommandType.StoredProcedure;  
cmd.Connection = dbConnection;  
conn.Open();
cmd.ExecuteNonQuery();

答案 1 :(得分:0)

如果您的数据库是SQL Server,则需要在NewModel和OldModel的服务器之间创建链接服务器连接。您需要运行sp_addlinkedserver存储过程(MSDN documentation here)。

正如Oded的评论所述,您对NewModel的连接字符串将只是一个普通的连接字符串(server = NewModelServer; Initial Catalog = NewModel; UID =; PWD =;)并且只是与用户连接(SQL Server身份验证或集成安全性) )可以访问两个服务器。

希望这有帮助!