我遇到了一个问题,我需要弄清楚我的表中是否已存在主键值。
我将数据从ERP系统传输到我的SQL Server数据库,这些数据在很多表中被拆分,都有不同的聚类PK。
为了防止因锁定数据导致的数据损失,我构建了一种方法,可以将所有表格和数据从表格a复制到我的SQL Server中的表格b。
为了获得更好的性能,我只从ERP中传输x个月的数据而不是所有数据。此外,我需要跟踪的新数据可能会发生变化。
我的问题是,有没有办法,我可以动态地只复制数据,这是新的并更新已更改的数据?
答案 0 :(得分:0)
如果您有权访问SSIS,您可以快速创建一个ssis包来实现缓慢变化的维度。
答案 1 :(得分:0)
我的问题是,有没有办法,我可以动态地只复制数据,这是新的并更新已更改的数据?
是
首先我的技术要做到这一点:
- 制作动态查询
主要思想是检查id是否已经不存在或存在它取决于脚本
True:存在(插入)
错误:不存在(更新)
现在:像这样的动态查询
select
'Begin' + Char(13) + Char(10) -- Now i do this becouse i well declare a variblae So every time generate make a seperator to avoid error
'Declare @ID Int '+ Char(13) + Char(10)
'select @ID =' + A.ID -- now make Select Fields or supQuery To GEt the ID From Old Data Base
'if Not EXISTS ( SELECT 1 FROM MyTable WHERE ID =@ID ) ' + Char(13) + Char(10) -- @ID Come From OLD Data Base And i Check it in the new Data base
'Insert into MyTable (Fields) '+ Char(13) + Char(10)
'Values ('+ Char(13) + Char(10)
+' '+ '@ID'+ Char(13) + Char(10)
+','+ Cast(Isnull(''''+A.Nvarchar(50)+'''' ,'New') As NVarChar(100)) + Char(13) + Char(10)--EXP With Nvarchar
+','+ IsNull(Cast(A.INT || Decimal .ETC As NVarChar(10)) ,'0' ) + Char(13) + Char(10)--EXP With INT
+') ; '+ Char(13) + Char(10)
'End' + Char(13) + Char(10)
'Else ' + Char(13) + Char(10)
'Update MyTable Set ' + Char(13) + Char(10)
+' '+'ID = @ID' + Char(13) + Char(10)
+','+ 'Nvarchar = '++','+ Cast(Isnull(''''+A.Nvarchar(50)+'''' ,'New') As NVarChar(100)) + Char(13) + Char(10)--EXP With Nvarchar
+','+ 'INT = ' +','+ IsNull(Cast(A.INT || Decimal .ETC As NVarChar(10)) ,'0' )+ Char(13) + Char(10)--EXP With INT
+ ' Where ID ='+''''+A.ID+'''; ' + Char(13) + Char(10) -- Dont Forget This : that make the Select Genertate ROw By Row
+ 'GO ' + Char(13) + Char(10)
+' End ; ' + Char(13) + Char(10)
FROM MyTable As A
注意:U从旧数据库运行此脚本并在新数据库中运行IT
我希望这能帮到你,因为你不给我一个EXP
答案 2 :(得分:0)
答案 3 :(得分:0)
我通过使用动态SQL + XML路径解决了我的问题。
我从Information Schema获得了所需的所有密钥。然后我将2 TableName
和Filter
放在一起,并使用子选择+ XML路径设置TableName
,其中包含逗号分隔的过滤器列表。
我把它放在一个临时表中,将它与动态SQL结合起来就可以了。
感谢您的帮助:)