Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 将连续数字设置为特定行_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 将连续数字设置为特定行

Sql 将连续数字设置为特定行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有这样的桌子: +-----------+--------------------------------------+--------------+ | DesignKey | DesignTypeGuid | DesignNumber | +-----------+--------------------------------------+--------------+ | 2312 | 4FB560B0-E867-46B2-B116

我有这样的桌子:

+-----------+--------------------------------------+--------------+
| DesignKey |            DesignTypeGuid            | DesignNumber |
+-----------+--------------------------------------+--------------+
|      2312 | 4FB560B0-E867-46B2-B116-338AD48C97AC |            3 |
|      2313 | 4FB560B0-E867-46B2-B116-338AD48C97AC |            7 |
|      2314 | 4FB560B0-E867-46B2-B116-338AD48C97AC |            8 |
+-----------+--------------------------------------+--------------+
因此,我通过如下查询获得
DesignNumber
值:

DECLARE @CurrentChangeOrderDesignNumber INT = 
              (SELECT [DesignKey], [DesignNumber] 
                FROM [Design] 
                WHERE ParentDesignKey = @DesignKey
                AND DesignTypeGuid = @COTypeGuid ORDER BY DesignKey);
我想做的是获取这些数据,并从1开始设置新的
DesignNumber
值,因此我期望的结果应该是:

+-----------+--------------------------------------+--------------+
| DesignKey |            DesignTypeGuid            | DesignNumber |
+-----------+--------------------------------------+--------------+
|      2312 | 4FB560B0-E867-46B2-B116-338AD48C97AC |            1 |
|      2313 | 4FB560B0-E867-46B2-B116-338AD48C97AC |            2 |
|      2314 | 4FB560B0-E867-46B2-B116-338AD48C97AC |            3 |
+-----------+--------------------------------------+--------------+

我怎样才能做到这一点?关于

选择
查询中,您将使用
行号()

如果要更新值,可以使用可更新的CTE:

WITH toupdate as (
      SELECT d.*,
             ROW_NUMBER() OVER (PARTITION BY ParentDesignKey, DesignTypeGuid ORDER BY DesignNumber) as new_DesignNumber 
      FROM Design d
      WHERE ParentDesignKey = @DesignKey AND
            DesignTypeGuid = @COTypeGuid
     )
UPDATE toupdate
    SET DesignNumber = new_DesignNumber;

令人惊叹的。。。快速提问。如果我有一个号码。。。关于数字5,我想从这个数字继续,以便将6,7,8设置为设计编号。是否可以用CTE设置一个起始编号,而不是从一开始?您将在
行编号()的结果中添加“5”。您的意思是
行编号(5)
?因为它向我抛出了一个
行数
取0的错误arguments@Jonathan . . . <代码>(5+行号()覆盖(按ParentDesignKey划分,按DesignNumber排序的DesignTypeGuid))作为新的\u DesignNumber
WITH toupdate as (
      SELECT d.*,
             ROW_NUMBER() OVER (PARTITION BY ParentDesignKey, DesignTypeGuid ORDER BY DesignNumber) as new_DesignNumber 
      FROM Design d
      WHERE ParentDesignKey = @DesignKey AND
            DesignTypeGuid = @COTypeGuid
     )
UPDATE toupdate
    SET DesignNumber = new_DesignNumber;