Sql-Server
哪個數據庫事務日誌會增加?
我在我們的一個數據庫中發現了一個這樣的查詢缺失
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
。