2009-08-03 78 views
2

我在我的數據庫中有一個表「foo」,主鍵爲「fooID」。SQL Server中的每個實體自動增量字段?

我有一個引用foo.fooID的外鍵的第二個表「fooAttributes」。

我想在fooAttributes表(fooID,attributeNumber)上有一個組合鍵,其中attributeNumber在插入新屬性時以per-foo爲基礎自動遞增。所以foo號碼1將具有屬性1,2,3 ...並且foo號碼2將具有屬性1,2,3等。

什麼樣的SQL-fu是完成此操作所必需的?這是否實用? (我相信這是可能的,給予足夠的努力)。

+0

你不能在沒有大量手動干預的情況下在SQL Server中做到這一點。 IDENTITY字段是整個表格,例如,保證對整個表格是唯一的 - 不是針對特定的「fooID」。 – 2009-08-03 17:11:48

回答

2

我不認爲有一種方法可以在SQL中像MS SQL Server中的標識列一樣自動執行此操作。我會建立一個存儲過程來處理這個傳遞給fooID的過程。例如:

begin tran  
select @attributeNumber = isnull(max(attributeNumber),0)+1 
from fooAttributes where fooID = @fooID 

insert fooAttributes(fooID, attributeNumber) 
values(@fooID, @attributeNumber) 
commit 

可能不是你想要的。如果可能的自動方式,我想也看到它。

+0

我覺得這可能是我的解決方案。如何避免由於兩個來自不同用戶的同時插入而導致的問題? – 2009-08-03 16:59:00

1

聽起來像是你想要一個在Foo上觸發

在插入到foo:

Insert fooAttributes 
select SCOPE_IDENTITY(), attributeId 
from attributes 

我假設你有一個表稱爲「屬性」,其中包含的所有屬性。如果沒有,你可以做你自己的事情來達到屬性Ids(一個交叉連接的子選擇將是我的第一個猜測)。