SQL Server 2012中的特殊自定义增量列
假设我有一个包含3列的tableSQL Server 2012中的特殊自定义增量列,sql,sql-server,tsql,Sql,Sql Server,Tsql,假设我有一个包含3列的tableTableTask: TaskID, DesignID, TaskName 我希望有一个特殊的列TaskName,它的自动编号取决于DesignID,我希望重复.XXX部分,但每个记录仍然是唯一的,因为有IDX部分 ID1.001, ID1.002, ..., ID1.999 ID2.001, ID2.002 我已经尝试了下面代码中的东西,但我只能 ID1.001, ID1.002, ID1.003, ID2.004, ID2.005 我的代码: CREAT
TableTask
:
TaskID, DesignID, TaskName
我希望有一个特殊的列TaskName
,它的自动编号取决于DesignID
,我希望重复.XXX
部分,但每个记录仍然是唯一的,因为有IDX
部分
ID1.001, ID1.002, ..., ID1.999
ID2.001, ID2.002
我已经尝试了下面代码中的东西,但我只能
ID1.001, ID1.002, ID1.003, ID2.004, ID2.005
我的代码:
CREATE TABLE TableTask
(
TaskID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
DesignID INT NOT NULL,
TaskName AS 'ID' + CAST(DesignID AS VARCHAR(6)) + '.' +
RIGHT('000' + CAST(TaskID AS VARCHAR(3)), 3) PERSISTED
)
您可以将其设置为一个计算列,该列调用一个函数,该函数为该行的设计ID返回次高的.XXX部分,并将它们连接起来
DesignID + '.' + MySchema.MyFunction(DesignID)
函数中的代码(在简单的psuedocode中)如下所示:
DECLARE @Output int;
SELECT @Output=CONVERT(int,RIGHT(MAX(TaskName),3))
FROM MyTable
WHERE DesignID=@parameter;
IF @Output IS NULL
SET @Output=0;
RETURN @Output + 1;
这假设函数返回一个整数,然后在计算中构建
TaskName
字符串。或者,您可以让函数返回一个字符串,并在那里生成所有字符串。您可以在查询时使用行号
(例如使用变量以便于测试):
输出:
1 1 ID1.001
3 1 ID1.002
4 1 ID1.003
2 2 ID2.001
5 2 ID2.002
6 3 ID3.001
7 4 ID4.001
我试图了解这在哪个世界是有用的。你有没有试过(按设计id划分,按id排序)?我的部门不是IT部门,但我有一些IT技能,我的老板让我开发许多应用程序,这些应用程序可能不是最好的,但它们对我们有好处。有时候,老板只是想拥有某些东西,这些东西(对我)可能没有用处,但他想要他想要的东西。有时,我会争辩,有时我会放弃。你永远不应该在数据库中存储这样的信息。我想我可以在应用程序端处理演示文稿,而不是让数据库处理它。这将是一个非常好的主意。我真的很难看到这有什么帮助为什么?它产生的正是OP所要求的。将这个问题视为学术性问题,撇开是否有更好的方法不谈,这就回答了这个问题。好吧,现在我很好奇,这个函数的脚本是什么?它将获得传递给它的DesignID的MAX TaskName,解析它以获得.XXX值,添加一个,然后返回该数值。请告诉我。因为我将无法编写该函数
1 1 ID1.001
3 1 ID1.002
4 1 ID1.003
2 2 ID2.001
5 2 ID2.002
6 3 ID3.001
7 4 ID4.001