我對 SQL Server 比較陌生。我想從表中洗掉一些記錄。我想運行以下陳述句:
DELETE Table1
WHERE COLUMN1 = 7
因此,在運行查詢之前,我運行了以下查詢:
SELECT *
FROM Table1
WHERE COLUMN1 = 7
查詢的結果是 3 行。
我DELETE在 SSMS 中運行了原始查詢,它顯示:
324 ROWS affected
0 ROWS affected
3 ROWS affected
我猜測某處有某種觸發器或外鍵導致此陳述句洗掉其他表中的額外 324 行。我恢復了資料庫以解決該問題。
問題是:DELETE在我在 SSMS 中執行之前,有沒有辦法根據我的陳述句顯示/列出要洗掉的任何/所有記錄?
uj5u.com熱心網友回復:
要運行資料修改查詢并確信它具有所需和預期的結果,請按以下步驟操作。
始終在您的陳述之前加上begin tran。
確保檢索實際執行計劃- (CTRL M) 或查詢選單 > 包括實際執行計劃。
在運行查詢之前,運行 set statistics io on
運行您的查詢,確保您已包含 begin tran
檢查執行計劃選項卡,它將顯示查詢中涉及的每個表。
查看IO 統計資訊的訊息選項卡,它會列出每個表以及針對每個表執行的 IO 數量。
如果一切看起來都正確,請運行commit tran,或者如果您想取消查詢運行rollback
請注意,如果您在生產系統上作業,您的事務可能會阻止其他查詢,直到您commit或rollback。
uj5u.com熱心網友回復:
使用 ON DELETE CASCADE 這將指定在洗掉父資料時洗掉子資料。
下面是一個示例,當我們使用級聯作為洗掉規則創建第二個外鍵時,上面的洗掉命令通過洗掉子表“States”中的記錄成功運行,該子表又洗掉了第二個子表“Cities”中的記錄。
CREATE TABLE Countries
(CountryID INT PRIMARY KEY,
CountryName VARCHAR(50),
CountryCode VARCHAR(3))
CREATE TABLE States
(StateID INT PRIMARY KEY,
StateName VARCHAR(50),
StateCode VARCHAR(3),
CountryID INT)
GO
CREATE TABLE Cities
(CityID INT,
CityName varchar(50),
StateID INT)
GO
INSERT INTO Countries VALUES (1,'United States','USA')
INSERT INTO Countries VALUES (2,'United Kingdom','UK')
INSERT INTO States VALUES (1,'Texas','TX',1)
INSERT INTO States VALUES (2,'Arizona','AZ',1)
INSERT INTO Cities VALUES(1,'Texas City',1)
INSERT INTO Cities values (1,'Phoenix',2)
GO
ALTER TABLE [dbo].[States] WITH CHECK ADD CONSTRAINT
[FK_States_Countries] FOREIGN KEY([CountryID])
REFERENCES [dbo].[Countries] ([CountryID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Cities] WITH CHECK ADD CONSTRAINT
[FK_Cities_States] FOREIGN KEY([StateID])
REFERENCES [dbo].[States] ([StateID])
ON DELETE CASCADE
GO
DELETE FROM Countries where CountryID =1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/313208.html
標籤:查询语句 sql-server-2008 触发器 外键 sql-删除
上一篇:從2個不同的表中查找計數
