【问题标题】:Update table rows that are equal to view row更新等于视图行的表行
【发布时间】:2017-08-07 11:25:19
【问题描述】:

我的视图包含重复 guid 的表示

GUID
----
1234
5524
1111

然后我有这样的表:

ID|SomeColumn|GUID
--+----------+----
1 |value1    |1111
2 |value1    |1112
3 |value1    |1113
4 |value1    |5524
5 |value1    |1234

我想创建遍历该表的循环并更新 GUID 等于该视图(表)GUID 的那些行。

我系了这个:

UPDATE DT
    SET [GUID] = dbo.CREATE_UNIQUE_GUID(ID)
    FROM [DetailsTable] as DT
    INNER JOIN GUID_Duplicates as GD
        ON DT.GUID=GD.GUID
        WHERE DT.GUID=GD.GUID

并且有:在函数中无效使用副作用运算符“UPDATE”。

所以在伪代码中我想:

如果 DataTable 包含具有相同 GUID 的行,则在 Duplicate Table 中为每个重复项设置 GUID 为新生成的值。

注意:我有 guid 生成工作,所以我只是不确定如何使用每个视图值浏览该 DataTable。 DataTable 也可以有多个行,其中 GUID 等于 View 中的每个 GUID。

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。另外,显示您拥有此代码的编程块。

标签: sql while-loop sql-update


【解决方案1】:

UPDATE 语句直接使用 SELECT 子句:

 UPDATE [DetailsTable] SET [DetailsTable].[GUID] = dbo.CREATE_UNIQUE_GUID(ID)
 FROM [GUID_Duplicates]
 WHERE [DetailsTable].GUID = [GUID_Duplicates].GUID 

【讨论】:

  • 如果原始查询失败,这将失败。
  • 这比我的查询要好,我喜欢。但可能原因是因为我使用了我的内部函数。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2010-11-13
  • 2016-05-04
  • 1970-01-01
相关资源
最近更新 更多