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
Sql 如何用几百条具有唯一ID的记录更新现有表_Sql_Sql Server 2017_Row Number_Unique Id - Fatal编程技术网

Sql 如何用几百条具有唯一ID的记录更新现有表

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

我在更新一个现有表时遇到问题,该表包含数百条具有唯一ID的记录

该表名为BHIVE.ProjectDataGroupDetail,有几百条记录。 我要更新的字段名为ProjectDataGroupDetailID。我还在用值“1”更新第二个字段

我的存储过程是:

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
;