首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Truncate与批处理中的SQL Truncate

SQL Truncate与批处理中的SQL Truncate
EN

Stack Overflow用户
提问于 2018-08-23 23:16:21
回答 1查看 72关注 0票数 0

我有一个填充临时表的作业,一旦完成,它就会在一个存储过程中截断几个临时表。我遇到的问题是,有时所有这些表都不会截断,这会导致下一次插入时出现PK约束,因为它们不是空的。我不知道是不是因为我在Azure中没有足够的DTU。截断是并行发生的,还是等待一个完成后再移动到下一个?我应该分批做这个吗?好处和坏处是什么?

不是一直在工作

代码语言:javascript
复制
CREATE PROCEDURE truncate_tables
  AS
    BEGIN
     TRUNCATE TABLE dbo.table1;
     TRUNCATE TABLE dbo.table2;
     TRUNCATE TABLE dbo.table3;
     TRUNCATE TABLE dbo.table4;
     TRUNCATE TABLE dbo.table5;
     TRUNCATE TABLE dbo.table6;
    END

建议

代码语言:javascript
复制
CREATE PROCEDURE truncate_tables
  AS
    BEGIN
     TRUNCATE TABLE dbo.table1;
     GO
     TRUNCATE TABLE dbo.table2;
     GO
     TRUNCATE TABLE dbo.table3;
     GO
     TRUNCATE TABLE dbo.table4;
     GO
     TRUNCATE TABLE dbo.table5;
     GO
     TRUNCATE TABLE dbo.table6;
     GO
    END
EN

回答 1

Stack Overflow用户

发布于 2018-08-23 23:54:41

我认为如果你删除现有的连接,除了当前的连接,你可能会得到更好的结果:

声明@kill varchar(8000) = '';

代码语言:javascript
复制
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(5), c.session_id) + ';'

FROM sys.dm_exec_connections AS c
JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id
WHERE c.session_id <> @@SPID
--WHERE status = 'sleeping'
ORDER BY c.connect_time ASC

EXEC(@kill)

我以前在有许多用户连接的数据库中看到过这个问题。

另一种选择是缩放层,截断表,缩小规模。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51989077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档