2011-03-18 76 views
4

我似乎還記得,當表中的一行更新時,SQL Server首先刪除該行,然後重新添加具有相同標識值的列的行(如果存在此列)。任何人都可以確認嗎?SQL Server - 當表中的一行更新時會發生什麼?

+1

我很好奇你們爲什麼好奇蘭迪爲什麼好奇。這是一種很好的學習方式。 – 2013-08-14 13:44:20

+1

@LeeGunn - 我已經開始學習了,在3到4年的時間裏,我一直在關注如此多的人對真正回答問題不感興趣。他們只是對爭論感興趣。我已經學會忽視這些人。 – 2013-08-14 14:09:07

回答

10

False。在大多數情況下,數據會在同一頁面內進行更改。使用SQL Server 2008,您實際上可以查詢數據駐留在磁盤上的哪個位置,這會顯示多少。

說完居然看着它現在,我把它都回來了:

http://www.sqlskills.com/BLOGS/PAUL/category/On-Disk-Structures.aspx

這可以在SQL Server 2008上容易測試(從鏈接的文章修改後的代碼)

CREATE TABLE test (c1 INT, c2 VARCHAR (2000)); 
GO 
CREATE CLUSTERED INDEX test_cl ON test (c1); 
GO 
CHECKPOINT; 
GO 
INSERT INTO test VALUES (1, REPLICATE ('Paul', 500)); 
GO 
CHECKPOINT; 
select %%physloc%%, * from test -- 0x3E01000001000000 
GO 
UPDATE test SET c1 = 2 WHERE c1 =1; 
GO 
select %%physloc%%, * from test -- 0x3E01000001000100 
                ^
                | 
            notice it has changed location 
+0

+1鏈接。哇。多麼豐富的信息。 – Thomas 2011-03-18 02:52:11

+0

+1所有SQLSkills博客都應該由任何使用SQL Server的人加上書籤。 – squillman 2011-03-18 03:20:45

+0

當我運行您的示例時,我在每個%% physloc %% Select語句中都收到SQL Server錯誤。 Msg 102,Level 15,State 3,Line 2 'physloc'附近語法不正確。 – 2011-03-19 22:52:50

相關問題