【问题标题】:SQL Server: Concat Rows / or Columns and update result to ColumnSQL Server:连接行/或列并将结果更新为列
【发布时间】:2019-02-26 15:44:43
【问题描述】:

以下情况:

我有一个动态(按列)构建的表...例如:

 Rowid UniqueID Name Birthdate Town ....
   1     null    Joe  Jan-93    Cologne
   2     null    Nick Okt-00    London

我正在构建这个 TempTable 来为我的数据库中的所有数据创建一个 uniqueID TempTable 是由两个循环创建的,它们贯穿我所有的数据库表和列,并将所有主键数据复制到这个 TempTable。

我的目标是使用数据的连续值更新我的 TempTable 中的 UniqueID 列...例如:

    UniqueID
  JoeJan-93Cologne
  NickOkt-00London

您知道如何更新 UniqueID 吗?

我在想的是:

Loop 1 going through all Tables
 Select Table of Schema
Loop 2 going through all Columns of Table
 Select Column of Schema

 Copy Column to my Temp 

 -- here an update  like ... set UniqueID = select concat(UniqueID, @Column) 
 -- from @table where RowID = RowID
End loop 2 
end loop 1 

这可能吗 还是我必须打开第三个循环,它遍历所有行和连接值?

【问题讨论】:

  • 这尖叫着成为xy problem。为什么您认为每个表中的每一行都需要具有数据库范围内的唯一值?这有一种非常强烈的代码气味。
  • 我正在编写一个脚本来比较“相等”数据库模式的 xxx,但没有任何唯一值......所以我构建了一些(......我对 except 和 intersect 不太满意)
  • 您正在尝试比较模式或表中的数据?如果比较数据,跨数据库查询似乎会简单上亿倍。
  • @SeanLange :我的问题是,我需要比较数千个表和架构......你有什么想法(我不是那个专业开发人员)
  • 我不知道您要比较什么。两个数据库上的表结构是否相同?您是否想要任一数据库中不在另一个数据库中的所有数据?

标签: sql sql-server sql-update rows concat


【解决方案1】:

你可以试试这个

Update <YourTableName>
set UniqueId = ISNULL(Name, '') +  ISNULL(Cast(Birthdate as Varchar(10), '') + ISNULL(Town, '')

【讨论】:

    【解决方案2】:

    您可以将CONCAT()UPDATE 语句一起使用,不需要任何循环:

    UPDATE t
         SET UniqueID = CONCAT(Name, Birthdate, Town);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 2022-01-18
      相关资源
      最近更新 更多