【问题标题】:Forcing a transaction强制交易
【发布时间】:2018-05-29 01:38:08
【问题描述】:

我正在编写一个脚本,它需要遍历一个表并将值插入另一个表。

问题是在将数据插入新表之前链接数据时会出现一些重复值。

我在 while 循环中执行此操作,在我看来,SQLServer 正在内存中构建所有插入语句并在脚本完成时执行它们。

我的感觉是否正确?如果是,有没有办法强制 SQLServer 在代码中发生每个事务时单独执行它们?

【问题讨论】:

  • SQL Server 通常在每个 insert 语句之后提交 -- 除非您在事务中。
  • 为什么要使用循环插入数据?无论您在做什么听起来都应该是一个插入语句。你能分享你的代码吗?
  • 我假设在 while 循环中或者 if 语句不被视为事务,这意味着我的代码(逻辑)是问题吗?我宁愿不分享代码并通过自己解决问题、研究可能存在的问题并通过启发过程来学习。

标签: sql sql-server database tsql sql-server-2016


【解决方案1】:

一般来说(但并非总是如此),当您收到重复记录时,您的逻辑存在问题。也就是说,使用 select distinct 删除重复项。

Insert into tablec (a, b, c)
select distinct  tablea.a, tablea.b, tableb.c 
  from tablea
left outer join tableb on tablea.a = tableb.b

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 2016-12-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多