gpt4 book ai didi

sql - 如何从当前正在 INSERT 的表中 SELECT COUNT?

转载 作者:行者123 更新时间:2023-12-02 22:25:58 26 4
gpt4 key购买 nike

您好,考虑到表 TABLE_A 上运行了一个 INSERT 语句,这需要很长时间,我想看看它进展如何。

我尝试的是在长时间运行的语句仍在处理中时打开一个新 session (SSMS 中的新查询窗口),我运行了查询

SELECT COUNT(1) FROM TABLE_A WITH (nolock)

希望每次运行查询时它都能立即返回行数,但测试结果是即使使用(nolock),仍然只有在INSERT语句完成后才返回。

我错过了什么?我是否也将 (nolock) 添加到 INSERT 语句中?或者这是无法实现的?

<小时/>

(编辑)好吧,我已经找到了我错过的东西。如果您首先使用 CREATE TABLE TABLE_A,然后 INSERT INTO TABLE_A,则 SELECT COUNT 将起作用。如果您在没有先创建 TABLE_A 的情况下使用 SELECT * INTO TABLE_A FROM xxx,则以下任何操作都不起作用(甚至 sysindexes 也不起作用)。

最佳答案

简短回答:你不能这样做。

更长的答案:单个 INSERT 语句是 atomic手术。因此,查询要么插入了所有行,要么没有插入任何行。因此您无法计算它已经进展了多远。

更长的答案:马丁·史密斯(Martin Smith)为您提供了一种实现您想要的目标的方法。当然,您是否仍然想这样做取决于您。就我个人而言,如果您确实需要跟踪此类事情的进度,我仍然更喜欢以可管理的批处理插入。所以我会将 INSERT 重写为多个较小的语句。根据您的实现,这可能是一件微不足道的事情。

关于sql - 如何从当前正在 INSERT 的表中 SELECT COUNT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31560254/

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