2010-05-12 24 views
0

我的查询与我在之前在同一论坛中发布的问题得到的答案有关。我有一个连接到中央数据库所在SQL Server的客户端数据库的副本。该副本已包含更新的数据。我只是想将更新从该副本转移到中央数据库,这两者都持有相同的架构,并使用C#.NET存在于同一服务器中。我得到的解决方案之一是创建SSIS包并从UI中运行它。我想知道如何创建SSIS包来实现这一目标。我是SSIS的新手。我正在使用安装的SQL Server 2005标准版和Visual Studio 2008 SP1。我了解到,BIDS 2005用于创建SQL Server 2005默认使用的软件包。有人可以给我一个例子,因为我是新手。如何创建SSIS包以便从同一服务器内的一个数据库更新到另一个数据库

回答

1

在我所知道的SSIS中没有简单的方法来做到这一点。对于每个表,您都必须编写一个可以使用Execute SQL Taske在SSIS中调用的proc。例如:

SRC表
SSN LAST_NAMEFIRST_NAME您好
11111111个杰夫威廉斯
22222222个萨拉·詹金斯
33333333乔治·安德森

DEST表
SSN LAST_NAMEFIRST_NAME您好
11111111杰夫威廉斯
22222222个萨拉花
55555555 Jessica Billows

PROC:

INSERT INTO DEST(SSN,名字,姓氏)
SELECT s.SSN, s.first_name, s.last_name FROM @src小号 LEFT JOIN @dest d ON d。 SSN = s.SSN WHERE d.SSN IS NULL

更新dest
SET dest.First_Name = src.First_Name, dest.Last_Name = src.Last_Name
FROM DEST JOIN src ON src.SSN = dest.SSN

生成这种类型的逻辑可能证明有点乏味。你可以使用一个像红色大门SQL比较方便的工具来完成这个更快:http://www.red-gate.com/products/SQL_Data_Compare/index.htm

好运!

+0

谢谢了... :)我对SSIS也很新。重复所有表格的程序对我来说可能是一项艰巨的任务,但我认为我现在只能将其看作是一种解决方案。红门将是一个昂贵的解决方案,因为我不能负担得起。我可以和你联系吗?你能否通过我的电子邮件ID,以便我可以尽可能邮寄给你,如果我有任何疑问。再次感谢!:) – 2010-05-14 01:09:01

+0

由于某种原因,INSERT语句不适用于我。我假设你已经尝试从同一个数据库中的一个表插入另一个表。我试过了,我得到了一些错误。你能检查一次吗? – 2010-05-14 04:11:02

+0

我刚刚修改你的查询,我认为这个查询应该为我工作.. :) INSERT INTO dest(SSN,FName,LName)选择source.SSN,source.FName,source.LName从源LEFT JOIN dest开源。 SSN = dest.SSN AND dest.SSN IS NULL WHERE source.SSN NOT IN(从dest中选择dest.SSN) – 2010-05-14 06:51:35

0

如果你仅仅是从另一个表中的数据更新表中的数据,我会说SSIS是这样的矫枉过正。我会创建一个可以调用.NET包的过程,这可以简化过程并简化学习曲线。

+0

感谢您的回复。客户数据库的副本可能包含新的数据插入,以及许多表的更新,而不仅仅是一个表。我希望更改能够反映在中央数据库中。我不关心删除,因为我只是想将客户数据库副本中已存在的更新和任何新插入传输到中央数据库。有至少50个表格,也许有相同数量的视图和存储过程。 – 2010-05-13 14:33:46

相关问题