Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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 2012_Sql Update - Fatal编程技术网

按顺序更新SQL Server表中的字段

按顺序更新SQL Server表中的字段,sql,sql-server-2012,sql-update,Sql,Sql Server 2012,Sql Update,我有一个带有列DisplayName的表对象。名称中的值包括乔·史密斯,约翰·史密斯,简·史密斯。这种情况持续了数千条记录 我想更新表,以便从记录1开始直到最后一条记录,DisplayName的值如下所示。乔·史密斯=顾客1,约翰·史密斯=顾客2,简·史密斯=顾客3。。。依此类推,直到所有名称列都依次显示Customer,并附加一个数字,而不是列的当前值 这是SQL Server 2012 ***下面的例子不起作用,我已经修改了我的问题。我的错是没有包括足够的细节。该表称为Aoobject。需要

我有一个带有列
DisplayName
的表对象。名称中的值包括
乔·史密斯
约翰·史密斯
简·史密斯
。这种情况持续了数千条记录

我想更新表,以便从记录1开始直到最后一条记录,DisplayName的值如下所示。乔·史密斯=顾客1,约翰·史密斯=顾客2,简·史密斯=顾客3。。。依此类推,直到所有名称列都依次显示Customer,并附加一个数字,而不是列的当前值

这是SQL Server 2012

***下面的例子不起作用,我已经修改了我的问题。我的错是没有包括足够的细节。该表称为Aoobject。需要更改的字段实际上称为DisplayName。我需要用如下内容过滤结果集

Where ObjectDescription in ('Portfolio Description', 'Portfolio Group Description')

这似乎是个坏主意——“客户号”应该放在一个单独的栏中。它不是名字的一部分。但是,这很容易做到:

with toupdate as (
      select t.*, row_number() over (order by recordnum) as seqnum
      from table t
     )
update toupdate
    set fullname = fullname + ' Customer' + cast(seqnum as varchar(255));
我假设您对记录有一些编号(
recordnum
),因为问题是“记录一到最后一个记录”

编辑:

如果希望名称是唯一的,则仅为重复的名称附加一个数字

with toupdate as (
      select t.*,
             row_number() over (partition by fullname order by recordnum) as fn_seqnum,
             count(*) over (partition by fullname) as fn_cnt
      from table t
     )
update toupdate
    set fullname = fullname + ':' + cast(fn_seqnum as varchar(255));
    where fn_cnt > 1;

这仅在需要时(对于具有重复项的全名)才附加唯一编号。而且,它将数字的基数保持在尽可能低的水平,因此只有一个数字可以作为后缀。

这似乎是个坏主意——“客户号”应该放在单独的列中。它不是名字的一部分。但是,这很容易做到:

with toupdate as (
      select t.*, row_number() over (order by recordnum) as seqnum
      from table t
     )
update toupdate
    set fullname = fullname + ' Customer' + cast(seqnum as varchar(255));
我假设您对记录有一些编号(
recordnum
),因为问题是“记录一到最后一个记录”

编辑:

如果希望名称是唯一的,则仅为重复的名称附加一个数字

with toupdate as (
      select t.*,
             row_number() over (partition by fullname order by recordnum) as fn_seqnum,
             count(*) over (partition by fullname) as fn_cnt
      from table t
     )
update toupdate
    set fullname = fullname + ':' + cast(fn_seqnum as varchar(255));
    where fn_cnt > 1;

这仅在需要时(对于具有重复项的全名)才附加唯一编号。而且,它将数字的基数保持在尽可能低的水平,因此只有一个数字可以作为后缀。

类似的方法就可以了。 希望客户名称是唯一的

;WITH cte_emp AS
(
SELECT CustomerName , ROW_NUMBER() over (order by CustomerName) slno
  FROM Customer
  )
UPDATE t SET CustomerName = 'Customer ' + cast(slno as varchar)
  FROM Customer t
 INNER JOIN cte_emp c ON t.CustomerName = c.CustomerName

这样就行了。 希望客户名称是唯一的

;WITH cte_emp AS
(
SELECT CustomerName , ROW_NUMBER() over (order by CustomerName) slno
  FROM Customer
  )
UPDATE t SET CustomerName = 'Customer ' + cast(slno as varchar)
  FROM Customer t
 INNER JOIN cte_emp c ON t.CustomerName = c.CustomerName

类似于
SET col=Customer+RANK(诸如此类)
类似于
SET col=Customer+RANK(诸如此类)
如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!我对我的问题做了一些修改。您能再看一看吗?如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!我对我的问题做了一些修改。你能再看一下吗?已经有一个客户编号栏了。我只需要一个方法来保持名字的唯一性,一个数字就足够了。我在我原来的帖子中添加了更多细节。我省略了一些重要信息。已经有一个客户编号列。我只需要一个方法来保持名字的唯一性,一个数字就足够了。我在我原来的帖子中添加了更多细节。我遗漏了一些重要的信息。