我的数据库中有一个表“foo”,主键为“fooID。”
我有第二个表“fooAttributes”,其中一个外键引用了foo.fooID。
我想在fooAttributes表(fooID,attributeNumber)上有一个复合键,当我插入一个新属性时,attributeNumber在per-foo的基础上自动递增。因此,foo 1将具有属性1,2,3 ...而foo number 2将具有属性1,2,3 ......等。
实现这一目标需要什么样的SQL-fu?这是实用的吗? (我确信,只要付出足够的努力,这是可能的。)
答案 0 :(得分: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
可能不是你想要的。如果可以采用自动方式,我也希望看到它。
答案 1 :(得分:1)
听起来你想要在Foo上使用触发器。
插入Foo:
Insert fooAttributes
select SCOPE_IDENTITY(), attributeId
from attributes
我假设您有一个名为“attributes”的表,其中包含所有属性。如果没有,你可以做自己的事情来获得属性ID(在subselect上的交叉连接将是我的第一个猜测)。