Sql-Server

哪個數據庫事務日誌會增加?

  • November 8, 2018

我在我們的一個數據庫中發現了一個這樣的查詢缺失

Use database2
go

delete database1.dbo.table1
from table1 as t1
join table2 on t1.column1 = t2.column2 and t2.column3 = 1

我很難理解它,因為如果 table1 或 table2 = 1 中的 column3 並且連接條件成功,它看起來會從 database1.dbo.table1 中刪除所有內容(如果我錯了,請糾正我)。它甚至不打算觸及 database1。

另外,如果發生這種情況,哪個數據庫事務日誌會變得很大,database1 還是 database2?查詢在 Database2 中執行,但正在對 database1 中的表進行刪除。

感謝您的輸入。

創建一個最小的、完整的和可驗證的範例將幫助您在未來更好地提出問題,並允許其他人更輕鬆地幫助您。

我創建了一個:

CREATE DATABASE db1;
CREATE DATABASE db2;
GO
USE db1;
CREATE TABLE dbo.table1 (id1 int, id2 int);
USE db2
CREATE TABLE dbo.table1 (id1 int, id2 int);
CREATE TABLE dbo.table2 (id1 int, id2 int);

INSERT INTO db1.dbo.table1(id1, id2) VALUES (1, 2);
INSERT INTO db1.dbo.table1(id1, id2) VALUES (3, 2);
INSERT INTO db2.dbo.table1(id1, id2) VALUES (1, 2);
INSERT INTO db2.dbo.table2(id1, id2) VALUES (1, 2);

DELETE FROM db1.dbo.table1
FROM dbo.table1 t1
   INNER JOIN dbo.table2 ON t1.id1 = table2.id1

查看表格是有啟發性的:

SELECT *
FROM db1.dbo.table1;
╔═════╦═════╗
║ id1 ║ id2 ║
╚═════╩═════╝
SELECT *
FROM dbo.table1;
╔═════╦═════╗
║ id1 ║ id2 ║
╠═════╬═════╣
║ 1 ║ 2 ║
╚═════╩═════╝
SELECT *
FROM dbo.table2;
╔═════╦═════╗
║ id1 ║ id2 ║
╠═════╬═════╣
║ 1 ║ 2 ║
╚═════╩═════╝

清理:

USE master;
DROP DATABASE db2;
DROP DATABASE DB1;

外賣似乎是刪除了 db1.dbo.table1 中的所有行,這是有道理的,因為該FROM dbo.table1 JOIN dbo.table2 ...子句根本沒有引用database1.dbo.table1

引用自:https://dba.stackexchange.com/questions/222124