【发布时间】:2021-01-15 23:29:44
【问题描述】:
我正在尝试向表中插入记录,并且需要在 Sql 服务器数据库中的现有表 ALO_DimSubscriberWeighting 中插入应该按顺序排列的列 SubscriberWeightingID。理想情况下,SubscriberWeightingID 应该基于该表是最新的,并且应该按顺序继续其余的。这是我尝试过的,但出现错误 我如何做到这一点 我已经使用了 orber by 子句,但它仍然在抱怨。有没有另一种方法来做到这一点。我基本上有 50 个这样的插入要执行
insert into ALO_DimSubscriberWeighting ([SubscriberWeightingID],[SubscriberNK],[WeightingAmount],[IsActive]) values ((ROW_NUMBER() OVER(ORDER BY [SubscriberWeightingID]),'NSFR80R0040C0090','0',1)
insert into ALO_DimSubscriberWeighting ([SubscriberWeightingID],[SubscriberNK],[WeightingAmount],[IsActive]) values ((ROW_NUMBER() OVER(ORDER BY [SubscriberWeightingID]),'NSFR80R0040C0100','0',1)
insert into ALO_DimSubscriberWeighting ([SubscriberWeightingID],[SubscriberNK],[WeightingAmount],[IsActive]) values ((ROW_NUMBER() OVER(ORDER BY [SubscriberWeightingID]),'NSFR80R0040C0110','0',1)
错误
Invalid column name 'SubscriberWeightingID'.
Msg 4108, Level 15, State 1, Line 1
Windowed functions can only appear in the SELECT or ORDER BY clauses
【问题讨论】:
-
我对你想要做什么有点困惑,但也许不要使用
ROW_NUMBER(),而是尝试使用SELECT MAX(SubscriberWeightingID) + 1 FROM ALO_DimSubscriberWeighting...如果你没有将它设置为自动递增。 -
不幸的是,该表的自动增量功能未设置为自动。因此,当插入新记录时,它应该根据最后的 Id + 1 进行插入
-
如何在值语句中添加 SELECT MAX(SubscriberWeightingID) + 1
-
修改表,使其使用
IDENTITY列或DEFAULT约束和SEQUENCE,并让服务器为您生成它。使用建议的SELECT MAX()容易受到竞争条件的影响,并且可能会为并发插入生成重复值。 -
代替值,使用:
SELECT MAX(SubscriberWeightingID) + 1,'NSFR80R0040C0090','0',1 FROM ALO_DimSubscriberWeighting
标签: sql sql-server