Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2012中的特殊自定义增量列_Sql_Sql Server_Tsql - Fatal编程技术网

SQL Server 2012中的特殊自定义增量列

SQL 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

假设我有一个包含3列的table
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