Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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:添加增量值(非标识)_Sql_Sql Server_Insert - Fatal编程技术网

SQL Server:添加增量值(非标识)

SQL Server:添加增量值(非标识),sql,sql-server,insert,Sql,Sql Server,Insert,我有一个表,我想插入一些行。有一列num不是标识。当插入新行时,我希望num值从现有的最高值开始递增1。以下是我到目前为止的代码: insert into table1 ( num, val) select (( select max(num) from table1) + row_number() over (order by num)), val from table1 以下是我得到的错误: 子查询返回了多个值。这是不允许的,因为 子查询后面是=,!=,=或者当子查询用作 表情 更新 错误

我有一个表,我想插入一些行。有一列
num
不是标识。当插入新行时,我希望
num
值从现有的最高值开始递增1。以下是我到目前为止的代码:

insert into table1 ( num, val)
select (( select max(num) from table1) + row_number() over (order by num)), val
from table1
以下是我得到的错误:

子查询返回了多个值。这是不允许的,因为 子查询后面是=,!=,=或者当子查询用作 表情

更新 错误来自触发器,因此我发布了一个关于触发器的新问题:

您应该使用窗口函数而不是子查询:

insert into table1 (num, val)
    select ( max(num) over () + row_number() over (order by num) ), val
    from table1;

但是,您的问题中的查询无法返回该错误,因为没有“分组依据”的聚合查询始终只返回一行。

您应该使用窗口函数而不是子查询:

insert into table1 (num, val)
    select ( max(num) over () + row_number() over (order by num) ), val
    from table1;

但是,您的问题中的查询无法返回该错误,因为没有“分组依据”的聚合查询始终只返回一行。

您的查询无法返回该错误。唯一的子查询是一个聚合查询,它没有
分组依据
——并且只返回一行。此外,您应该使用窗口函数来计算max.@GordonLinoff-在
table1
上可能有一个触发器生成此错误以响应上述查询。当然,我们无法在没有看到触发器的情况下进一步跟踪错误。@GordonLinoff确实。。。有一个触发器。我认为问题在于我要创建的查询一次插入多行。但是在触发器中;s代码每次需要1行。触发器跟踪中的更改Table1@aggicd . . . 再问一个关于修复触发器的问题。@aggicd-这正是修复问题的错误方向。应该编写触发器来处理多行插入、删除和更新。因为即使您“修复”了上面的当前语句,您也会留下一条绊脚石,等待下一个编写涉及此表的语句的人,而这些语句恰好会影响多行。(通常,6个月后的“下一个人”就是你自己/足够长的时间过去了,以至于你忘记了触发器的奇怪性)你的查询无法返回该错误。唯一的子查询是一个聚合查询,它没有
分组依据
——并且只返回一行。此外,您应该使用窗口函数来计算max.@GordonLinoff-在
table1
上可能有一个触发器生成此错误以响应上述查询。当然,我们无法在没有看到触发器的情况下进一步跟踪错误。@GordonLinoff确实。。。有一个触发器。我认为问题在于我要创建的查询一次插入多行。但是在触发器中;s代码每次需要1行。触发器跟踪中的更改Table1@aggicd . . . 再问一个关于修复触发器的问题。@aggicd-这正是修复问题的错误方向。应该编写触发器来处理多行插入、删除和更新。因为即使您“修复”了上面的当前语句,您也会留下一条绊脚石,等待下一个编写涉及此表的语句的人,而这些语句恰好会影响多行。(通常,6个月后的“下一个人”就是你自己/足够长的时间过去了,你忘记了触发器的奇怪性)顺便说一下,如果我使用此代码,我会在插入重复密钥时出错table1@aggicd . . . 这似乎是不可能的,除非您有一个
where
子句。顺便说一下,如果我使用此代码,我会在中插入重复键时出错table1@aggicd . . . 这似乎不可能,除非您有
where
子句。