我有兩個不同的數據庫,客戶端從.MDF
文件附加到.\SQLEXPRESS
服務器。主服務器在名爲COMPUTER_NAME
的另一臺計算機上的服務器上運行。如何合併兩個不同服務器上的兩個數據庫?
我想合併這些使用C#運行.SQL
文件。我會貼上我的代碼如下供參考,但基本上我的問題是,如果我連接到使用
string sqlConnectionString = @"Server=.\SQLEXPRESS; Trusted_Connection=True";
服務器然後我找不到COMPUTER_NAME
數據庫。如果我用
string sqlConnectionString = @"Server=COMPUTER_NAME; Trusted_Connection=True";
它會尋找在C我.MDF
申報:COMPUTER_NAME
驅動,而不是本地計算機。
如何連接到不同服務器上的這兩個數據庫?
附加信息:
我使用的SQL腳本。當兩個數據庫都在同一臺服務器上時,這種方式可以很好地工作,但我不能再這樣做了。
CREATE DATABASE ClientDB
ON (Filename = 'C:\Clayton.mdf')
, (Filename = 'C:\Clayton_log.ldf')
FOR ATTACH;
-- update the client from the master
MERGE [ClientDB].[dbo].[table] trgt
using [MasterDB].[dbo].[table] src
ON trgt.id = src.id
WHEN matched AND trgt.lastmodified <= src.lastmodified THEN -- if master row is newer
UPDATE SET trgt.[info] = src.[info], ... -- update the client
WHEN NOT matched BY source -- delete rows added by client
THEN DELETE
WHEN NOT matched BY target -- insert rows added by master
THEN INSERT ([info], ...) VALUES (src.[info], ...);
-- close all connections to database
ALTER DATABASE ClientDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- detach database
EXEC sp_detach_db 'ClientDB', 'true';
我使用它的C#這樣運行:
string sqlConnectionString = @"Server=.\SQLEXPRESS; Trusted_Connection=True";
string script = File.ReadAllText(Environment.CurrentDirectory + @"\MergeTotal.sql");
SqlConnection conn = new SqlConnection(sqlConnectionString);
IEnumerable<string> commandStrings = Regex.Split(script, @"^\s*GO\s*$",
RegexOptions.Multiline | RegexOptions.IgnoreCase);
conn.Open();
foreach (string commandString in commandStrings)
{
if (commandString.Trim() != "")
{
using (var command = new SqlCommand(commandString, conn))
{
command.ExecuteNonQuery();
}
}
}
如果整個過程中.SQL
或C#
發生的,只要它有預期的效果我不在乎。
在此先感謝您的任何指導或建議。
你多久需要運行呢? –
通常我很害怕。現在,它被配置爲每次程序啓動時,它都會檢查它是否與主數據庫連接到網絡,如果是,則會合並。 –
你可能不得不考慮重新設計它的工作方式,因爲你不能這樣真正地合併。您應該跟蹤更改,然後在主服務器上重新執行它們。 –