2011-04-24 74 views
1

我有一對夫婦在一個數據庫表中的行(讓調用它的客戶)。每行由SNo編號,由MS SQLServer固有的標識屬性自動增加。但是,當我刪除特定的行時,特定的行號留空,但我希望表格自動更正自己。如何在MS SQL Server 2005中自動設置行的SNo?

爲了給你一個例子:

我有一個樣本客戶表與以下行:

SNo CustomerName Age 

1 Dani   28 
2 Alex   29 
3 Duran  21 
4 Mark   24 

而且認爲我刪除第3行的表是這樣的:

SNo CustomerName Age 

1 Dani   28 
2 Alex   29 
4 Mark   24 

但我想表看起來像這樣:

SNo CustomerName Age 

1 Dani   28 
2 Alex   29 
3 Mark   24 

我怎樣才能做到這一點?

請幫我

感謝預期

+1

好像這已經被問:HTTP://計算器。com/questions/4597183 /填充空白的身份值列 – 2011-04-24 16:51:20

回答

3

正如已經指出的那樣做會破壞任何與SNo的關係,但是如果你這樣做是因爲你需要序數層中的序數,例如,你可以拉出一個[1..n]行號用;

SELECT ROW_NUMBER() OVER(ORDER BY SNo ASC), SNo, CustomerName, Age FROM Customer 

顯然,在這種情況下,行號僅僅是一個遞增的數字,其相對於意義的任何東西。

2

我不認爲你想這樣做。想象一下你有另一個表CustomerOrder存儲所有客戶訂單的場景。該表的結構可能是這個樣子:

CustomerOrder 
------------- 
OrderID  INT 
SNo   INT 
OrderDate DATETIME 
... 

在這種情況下,SNo字段是一個外鍵進入CustomerOrder表,我們用它來涉及訂單給客戶。如果您從Customer表中刪除一條記錄(有SNo = 1說),你要回去,並在整個CustomerOrder表更新SNo值?最好只讓ID的自動增量,而不要擔心由於刪除而導致ID中的空格。

1

正如已指出,在其他的答案,這是一個壞主意,如果原因是爲了演示也有其他的解決方案。

-- Add data to temp table 
select SNo, CustomerName, Age 
into #Customer 
from Customer 

-- Truncate Customer 
-- Resets identity to seed value for column 
truncate table Customer 

-- Add rows back to Customer 
insert into Customer(CustomerName, Age) 
select CustomerName, Age 
from #Customer 
order by SNo 

drop table #Customer 
2

爲什麼不創建視圖?

CREATE VIEW <ViewName> 
AS 
SELECT  
ROW_NUMBER() OVER(ORDER BY SNo ASC) AS SNo 
,CustomerName 
,Age 
FROM Customers 

GO 

然後通過從視圖中選擇訪問customers表中的數據。

當然,視圖中顯示的SNo在關係上下文中沒有意義,但返回的數據看起來完全像您希望的樣子。

+0

感謝Raj,它有幫助 – 2011-04-26 09:18:04

+0

或者您可以使用上述代碼創建存儲過程並將存儲過程關聯起來作爲gridview的數據源。 – 2011-04-28 22:46:39