Sql 如何用几百条具有唯一ID的记录更新现有表
我在更新一个现有表时遇到问题,该表包含数百条具有唯一ID的记录 该表名为BHIVE.ProjectDataGroupDetail,有几百条记录。 我要更新的字段名为ProjectDataGroupDetailID。我还在用值“1”更新第二个字段 我的存储过程是:Sql 如何用几百条具有唯一ID的记录更新现有表,sql,sql-server-2017,row-number,unique-id,Sql,Sql Server 2017,Row Number,Unique Id,我在更新一个现有表时遇到问题,该表包含数百条具有唯一ID的记录 该表名为BHIVE.ProjectDataGroupDetail,有几百条记录。 我要更新的字段名为ProjectDataGroupDetailID。我还在用值“1”更新第二个字段 我的存储过程是: ALTER PROCEDURE [BHIVE].[PopulateProjectDataGroupDetail] AS BEGIN -- SET NOCOUNT ON added to prevent extra resul
ALTER PROCEDURE [BHIVE].[PopulateProjectDataGroupDetail]
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
UPDATE BHIVE.ProjectDataGroupDetail
SET ProjectDataGroupDetailID = Row_Number() OVER (ORDER BY SampleProjects), ProjectDataGroup = 1
End
我得到一个错误:
Windowed functions can only appear in the SELECT or ORDER BY clauses
你能试试吗
UPDATE
BHIVE.ProjectDataGroupDetail
SET ProjectDataGroupDetailID = RowNumber
FROM
(
SELECT
Row_Number() OVER (ORDER BY SampleProjects) Rownumber
FROM
BHIVE.ProjectDataGroupDetail
) source
你可以用这个
通常一个唯一的Id是自动生成的,所以您只需将其排除在查询之外。如果ProjectDataGroupDetailID是唯一标识符,则无法更新它。表中已包含数据。我添加了一个新字段,需要使用已有记录的序列号更新此字段,然后运行update语句。如果不起作用,请告诉我谢谢,我已经运行了这个,好消息是,当我运行并执行存储过程时,它没有出错。看起来它应该可以工作,但ProjectDataGroupDetailID字段尚未更新。UPDATE ProjectDataGroupDetail SET ProjectDataGroupDetailID=RowNumber从选择行\号到按ProjectDataGroup RowNumber排序,ProjectDataGroup=2从ProjectDataGroupDetail source EndPlease,添加DBMS的标记以不按语法元素猜测它。此外,您还应提供表格结构,以及在什么情况下需要重置行编号。谢谢提示!我可以用一个额外的标签来更新这篇文章吗?还是只是在创建的时候更新。@ChanelGabb你可以在你的文章下面用更多的细节来丰富你的问题。我不得不删除了“按语句划分”的语句,这就行了!谢谢你!!使用select SampleProjects合并到ProjectDataGroupDetail为t,行号按SampleProjects为rn从ProjectDataGroupDetail为s合并到t。SampleProjects=s.SampleProjects匹配后,更新集合ProjectDataGroupDetailID=s.rn,ProjectDataGroup=1@ChanelGabb不客气!我把它放在这里是为了更一般的情况,在这种情况下,您可能需要在某些列组上重置编号。
merge into ProjectDataGroupDetail as t
using (
select id, row_number() over(partition by some_grouping_col order by id) as rn
from ProjectDataGroupDetail
) as s
on t.id = s.id
when matched then update
set
ProjectDataGroupDetailID = s.rn,
ProjectDataGroup = 1
;