T-SQL检查主键是否存在于重复表中
我遇到了一个问题,我需要弄清楚表中是否存在主键值。T-SQL检查主键是否存在于重复表中
我将ERP系统中的数据传输到我的SQL Server数据库中,这些数据在很多表中都被拆分,所有这些数据都有不同的集群PK。
为了防止通过锁定数据导致的数据通过,我构建了一种方式,在我的SQL Server中公布所有表并将数据从表a复制到表b。
为了获得更好的性能,我只将数据从ERP转移回来,而不是全部数据。另外,我可能需要跟踪新数据的变化。
我的问题是,有没有办法,我可以动态地复制数据,这是新的,并更新数据发生了变化?
如果您有机会获得SSIS您可以快速创建一个SSIS包来实现渐变维度..
我使用ssis获取数据,但包已经构建得如此详细,以至于如果我在查找表中创建内容,或者我必须改变比我更多的内容才能简化预算。可悲的。 – user2157063
参考下面的链接https://docs.microsoft.com/en-us/sql/integration-services/data-flow/transformations/slowly-changing-dimension-transformation – Anand
我的问题是,有没有办法,我可以dynamicaly只复制数据,这是新的,更新已更改的数据?
是
首先我的技术做到这一点:
- 制作一个动态查询
主要思想是,以检查是否ID已经不存在或者虽然存在这取决于on script
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 [email protected] ) ' + 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运行此脚本从旧的数据库并运行它在新的DB
我希望这帮助ü因为你不给我一个EXP
是的,我有一些或多或少simulate,但你呢可能知道是否存在一个表,该表包含每个表的聚集列的所有约束? – user2157063
好吧,我得到了来自 INFORMATION_SCHEMA.TABLE_CONSTRAINTS选项卡, INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE上校吧'选择tab.TABLE_SCHEMA,tab.TABLE_NAME,Col.Column_Name WHERE Col.Constraint_Name = Tab.Constraint_Name AND Col.Table_Name = Tab.Table_Name 和Constraint_Type =“PRIMARY KEY” ORDER BY TABLE_NAME' – user2157063
为u像我这样类似 - 不要忘了FK可能是它有一个新的密钥也 ,这样你们可以做如下 或者如果u有在拖数据库同一台机器 我想你可以使用合并它更容易编码 – kareem
我的解决我的问题使用动态SQL + XML路径。
我刚从Information Schema获得了所需的所有密钥。然后我把它放在2列TableName
和Filter
中,用subselect + XML路径,我设法让TableName
带有用逗号分隔的连接列表。
这个我把它放到一个临时表中,并将它与动态SQL结合起来,它可以工作。
感谢您的帮助:)
您的意思是重复(** **不是** **)。另外“如果主键存在”仅仅是使用'WHERE NOT EXISTS(...)'的问题,您可以考虑很多现有问题。 ***但是:***你继续说你想更新更改的数据。这是一个完全独立的问题。请[编辑]你的问题来澄清。 –