我使用SQL Server 2008 R2。SQL Server依赖的标识 - 是否有这样的事情?
我正在寻找一种功能,我将其描述为从属身份。
我会通过一个例子来解释。
考虑这样一个表:
脚本
CREATE TABLE [dbo].[Rooms](
[RoomID] [int] NOT NULL,
[ItemID] [int] NOT NULL,
[ItemDescription] [nvarchar] (250))
GO
数据:
RoomID ItemID ItemDescription
------ ------ ---------------
7 1 Door
7 2 Window (West)
7 3 Window (North)
8 1 Door
8 2 Table #1
8 3 Table #2
7 4 Table #1
8 4 Chair #1
7 5 Table #2
7 6 Table #3
8 5 Chair #2
(?谁能告诉秘密这里怎么形式的例表)
我希望能够像这样声明一个从属标识列:
ItemID [int] Identity(RoomID,1,1) NOT NULL
在[Rooms]
一个新行应触发测试的ItemID
最高值,其中RoomID
= @roomID
再加1
而是更新与RoomID
利用变化删除和插入所需数据。
现在我做到这一点编程这样的:
DECLARE @roomID INT
SET @roomID = 7
INSERT INTO [Allocation].[dbo].[Rooms]
([RoomID], [ItemID], [ItemDescription]) VALUES (@roomID,
(SELECT max([ItemID])+1 FROM [Allocation].[dbo].[Rooms] WHERE [RoomID][email protected])
,'Chair #1')
GO
那么,有没有这样的功能?
在可能的情况下没有,我可以编程服务器为我自动设置下一个依赖身份,给定一个特定的表,父列和从属标识列?
目前,在SQL Server 2008 R2 - 不,不幸的是。使用SQL Server ** 2012 **,我们将获得[sequences](http://sqlblog.com/blogs/aaron_bertrand/archive/2010/11/11/sql-server-11-denali-using-sequence.aspx ),这可能是一种帮助 - 它就像是一个“独立”的“IDENTITY”,而不是绑定到表格的列。 –
从表格中选择“MAX(ID)+ 1”并不容易,“这样的方法可以保证在繁忙的系统中生成重复数据。 得到这个正确的,正确的锁定和事务处理是一门科学 - 一个Remus Rusanu已经完善和[显示在以前的SO问题的答案中](http://stackoverflow.com/questions/5083846/sql- server-2005-using-generated-sequences-instead-of-identity-columns) –