我有一个填充临时表的作业,一旦完成,它就会在一个存储过程中截断几个临时表。我遇到的问题是,有时所有这些表都不会截断,这会导致下一次插入时出现PK约束,因为它们不是空的。我不知道是不是因为我在Azure中没有足够的DTU。截断是并行发生的,还是等待一个完成后再移动到下一个?我应该分批做这个吗?好处和坏处是什么?
不是一直在工作
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建议
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发布于 2018-08-23 23:54:41
我认为如果你删除现有的连接,除了当前的连接,你可能会得到更好的结果:
声明@kill varchar(8000) = '';
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)我以前在有许多用户连接的数据库中看到过这个问题。
另一种选择是缩放层,截断表,缩小规模。
https://stackoverflow.com/questions/51989077
复制相似问题