2009-08-03 72 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(一个交叉连接的子选择将是我的第一个猜测)。