我有一个像这样定义的表:
CREATE TABLE [dbo].[Test] (
[TestId] INT IDENTITY (1, 1) NOT NULL,
[Title] VARCHAR (100) NOT NULL,
....
当我的应用程序制作测试副本以便用户可以使用它时,它使用存储过程来执行此操作。这是我在该存储过程中的缩短版本。
INSERT INTO dbo.Test
(Title, ....)
SELECT Title, ....
FROM Test
WHERE TestId = @TestId;
那么例如一个TestId为200的表 可能有一个拷贝,使用225的TestId或身份序列中接下来的任何数字。
我想这样做,以便我现在可以控制创建TestId。我仍然希望它当然是独一无二的,但对于副本,我希望像TestId 200这样的东西在复制时变成200-1。
有人可以给我一个建议 至于如何在我的存储过程而不是使用身份中为TestId生成唯一的数字。我知道 Oracle有序列,但SQL Server有这样的东西,我该如何使用 他们在存储过程中?
答案 0 :(得分:0)
答案 1 :(得分:0)
您可能不希望按照您的建议做所需的解决方案。这可能是一个更好的解决方案。
CREATE TABLE TEST
(
TestID int identity(1,1) not null
, OriginalID int not null
, MoreStuff ...
primary key (NewID)
)
你可能也想要一个关于OriginalID的索引
在你的过程中
Insert Into TEST (OrginalID, MoreStuff ...)
select TestID, MoreStuff ..
from Test from where TestID = @ID
现在您有一个基于原始测试的新测试。您仍然可以根据OriginalID返回原始版本。
ADDED
这可以避免您原始建议所需的有些混乱的逻辑。现在,如果每个“基础”测试用例必须有序列1,2,3,您当然可以遵循原始建议(或内部序列号的单独列)。但除非你被迫这样做,否则不要这样做。