我有以下 SQL 选择语句:
SELECT DISTINCT
t3.*, t2.ItemPathwayGUID
FROM
SearchComplianceBuildCodeCat t1
INNER JOIN
SearchProductComplianceDraft t2 ON t1.SearchComplianceBuildCodeCatID = t2.SearchComplianceBuildCodeCatID
INNER JOIN
SearchComplianceBuildCodeCat t3 ON t1.SearchComplianceBuildCodeCatID_Parent = t3.SearchComplianceBuildCodeCatID
WHERE
t1.SearchComplianceBuildCodeCatLevel = 3
AND t1.Visible = 1
AND t3.Visible = 1
这将返回 29 行,每行 1000 多行。目前,
t2.ItemPathwayGUID
设置为空,因为它是新添加的列。我希望列的值等于NEWID()
。但是,对于相同的行,此值必须相同。
例如:
行A | 行B | 行C | ItemPathwayGUID |
---|---|---|---|
123 | A1 | T4 | 7FD6073F-7747-4BD9-838A-3789235D2749 |
123 | A1 | T4 | 7FD6073F-7747-4BD9-838A-3789235D2749 |
ABC | B3 | G2 | D7F906BF-66D1-450F-9E4B-61447CF91517 |
123 | A1 | T4 | 7FD6073F-7747-4BD9-838A-3789235D2749 |
321 | F0 | U6 | 60993525-3153-4AA0-8D82-8D61E024E043 |
ItemPathwayGUID
我已经尝试在选择上进行更新,但是这似乎是在更新每一行以具有新的 guid 而不是重复行的 id,导致 select distinct 命令返回所有 1000 多行而不是我想要的 29 行。
这可能吗?
您可以使用
MERGE
语句和函数调用,如下所示:
MERGE INTO w_uuid t USING(
SELECT DISTINCT
rowA
, rowB
, rowC
FROM w_uuid
) s ON s.rowA = t.rowA
AND s.rowB = t.rowB
AND s.rowC = t.rowC
WHEN MATCHED THEN UPDATE
SET ItemPathwayGUID = NEWID()
;