【问题标题】:Script for incrementally creating records增量创建记录的脚本
【发布时间】:2016-09-06 11:41:31
【问题描述】:

Paul 为下面的问题提供了一个有用的脚本,但我想实际执行这些更改。如果我使用 select 语句,我只能看到它 请帮忙解决这个问题

表名:公民

Firstname       Lastname    Telephone         Many other columns......
John             Smith      03907625212    
Andrew           Evans      0807452132    
Bill             Towny      05907122139  
Dame             Beaut      07894650569   

我有超过 150,000 条记录,其中电话号码需要采用设置格式(设置电话区号并按递增顺序),即 01907000001、01907000002,如下所示。除了名字和姓氏之外,还有其他列都将保持不变。只有电话字段需要这种转换。

理想情况下应该是这样的:

Firstname       Lastname      Telephone         Many other columns......
John             Smith       01907000001   
Andrew           Evans       01907000002  
Bill             Towny       01907000003 
Dame             Beaut       01907000004   

我将非常感谢您对此的帮助或指导。

【问题讨论】:

  • 您希望新的增量电话值按什么排序?例如。约翰史密斯应该是 01 岁吗?
  • 是的,请...从第一条记录开始自动递增
  • 在下面查看我的答案。
  • 嗨,保罗,我想真正实现这些更改。只有使用select语句才能看到

标签: sql-server tsql


【解决方案1】:

试试这样的:

SELECT 
    [FirstName],
    [LastName],
    '01907' + --area code
    RIGHT('00000' + --middle padding for zero's
        CAST(ROW_NUMBER() OVER (ORDER BY [LastName]) AS VARCHAR) --incremental value
        ,6) AS 'Telephone' --6 characters plus area code

        --<< YOUR OTHER FIELDS
FROM 
    [AdventureWorks].[Person].[Person]

我使用 Adventure Works 只是为了测试它。

如果您希望它增加其他值,请更改窗口函数中的 ORDER BY 子句。

【讨论】:

  • 嗨,保罗,我似乎可以按照你的建议让它工作 Citizen select [All LP First Name] ,[All LP Other Second Name] ,[All LP Surname] ,[All Liable Partys PIN ] ,'01907' + 000001 RIGHT('00000' + 1 CAST(ROW_NUMBER() OVER (ORDER BY [LastName]) AS VARCHAR),6) as 01907000001 [Telephone1] ,[Telephone2] ,[Mobilephone] ,[EmailAddress]
  • 因为你塞了一大堆我没做的东西!试试这个:选择 [All LP First Name], [All LP Other Second Name] , [All LP Surname], [All Liable Partys PIN], '01907' + RIGHT('00000' + CAST(ROW_NUMBER() OVER (ORDER BY [All LP Surname]) AS VARCHAR), 6) AS 'Telephone', [Telephone1], [Telephone2], [Mobilephone], [EmailAddress] FROM
  • 我上面脚本中的代码 cmet 仅供参考。不能用价值观代替。 :-)
  • 很好,像这样:选择 [All LP First Name], [All LP Other Second Name] , [All LP Surname], [All Liable Partys PIN], '01907' + RIGHT('00000 ' + CAST(ROW_NUMBER() OVER (ORDER BY [All LP Surname]) AS VARCHAR), 6) AS 'Telephone1', [Telephone2], [Mobilephone], [EmailAddress] FROM
  • 好的,所以您需要一个 UPDATE 语句而不仅仅是一个 SELECT。我们可能已经达到了这些 cmets 所能做的极限。 SO 不是为了讨论无休止的场景。您可以查看此链接:msdn.microsoft.com/en-us/library/ms177523.aspx 但我建议在更改任何数据时要小心。我还建议一些基本的 TSQL 培训。
猜你喜欢
  • 2018-08-20
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多