gpt4 book ai didi

sql-server - 插入触发器后 - SQL Server 2008

转载 作者:行者123 更新时间:2023-12-04 06:59:50 24 4
gpt4 key购买 nike

我有来自 datastage 的数据,这些数据被放入我们的 SQL Server 2008 数据库的表中:stg_table_outside_data .我们的来源每天早上都会将数据放入该表中。我想从 stg_table_outside_data 移动数据至 table_outside_data我在那里保存了多天的数据。

我创建了一个存储过程,用于插入来自 stg_table_outside_Data 的数据。进入 table_outside_data然后截断 stg_table_outside_Data .外部 datastage 进程不在我的控制范围内,因此我必须在 SQL Server 2008 中完成所有这些操作。我原本计划使用简单的 after insert 语句,但 datastage 在每 100,000 行后执行一次提交。触发器将在第一次提交后运行,并导致数据阶段进程出现死锁错误。

有没有办法设置插入后等待 30 分钟,然后确保在该时间范围内没有新的提交?我的问题有更好的解决方案吗?目标是将数据从暂存表中取出并放入工作表中而不会重复,然后为第二天早上的负载截断暂存表。

我感谢您的时间和帮助。

最佳答案

您可以这样做的一种方法是利用新的 MERGE SQL Server 2008 中的语句(请参阅 MSDN docsthis blog post ),并每隔 30 分钟左右将其安排为 SQL 作业。

MERGE 语句允许您根据源数据(您的临时表)和目标数据(您的“真实”表)是否符合某些条件,轻松地定义操作(插入、更新、删除或什么都不做),或者不是。

所以在你的情况下,它会是这样的:

MERGE table_outside_data AS target
USING stg_table_outside_data AS source
ON (target.ProductID = source.ProductID) -- whatever join makes sense for you

WHEN NOT MATCHED THEN
INSERT VALUES(.......)

WHEN MATCHED THEN
-- do nothing

关于sql-server - 插入触发器后 - SQL Server 2008,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2050781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com