我有一个包含以下字段的数据库表...
key,
db_name,
string_ID_in_DB,
text1,
text2
text1充满了重复项,我想展示一次,因为用户需要根据text1内容填充text2。
然后我需要更新每个db_name数据库中的text2。如果我只显示非重复的text1字段,我会从显示中删除20,000条记录,但我需要弄清楚如何跟踪这些记录,以便我可以在相应的db_name数据库中更新它们。
非常感谢有关如何执行此操作的任何建议。
感谢,
答案 0 :(得分:0)
我真的不确定你在追求什么,问题不是很清楚。此外,并非所有的SQL都是相同的(OP没有说明他们使用的是什么),所以这里是一种在SQL Server中执行此操作的方法:
DECLARE @YourTable table (KeyID int, text1 varchar(10))
INSERT @YourTable VALUES (1,'aaa')
INSERT @YourTable VALUES (2,'bbb')
INSERT @YourTable VALUES (3,'aaa')
INSERT @YourTable VALUES (4,'ccc')
INSERT @YourTable VALUES (5,'ccc')
INSERT @YourTable VALUES (6,'ccc')
INSERT @YourTable VALUES (7,'ddd')
INSERT @YourTable VALUES (8,'aaa')
--just display the first occurrence rows of each text1 value
SELECT
*
FROM (SELECT KeyID,text1,ROW_NUMBER() OVER (PARTITION BY text1 ORDER BY KeyID) AS RowNumber FROM @YourTable) dt
WHERE RowNumber=1
--delete all duplicates
;WITH NumberedRows AS
(SELECT
KeyID,ROW_NUMBER() OVER (PARTITION BY text1 ORDER BY KeyID) AS RowNumber
FROM @YourTable
)
DELETE NumberedRows
WHERE RowNumber>1
select * from @YourTable --<<display remaining rows
输出:
KeyID text1
----------- ---------- <<from 1st select
1 aaa
2 bbb
4 ccc
7 ddd
(4 row(s) affected)
KeyID text1
----------- ---------- <<from second select after delete
1 aaa
2 bbb
4 ccc
7 ddd
(4 row(s) affected)
答案 1 :(得分:0)
对于您的UI,您只想在其中显示唯一记录...
SELECT DISTINCT
text1,
text2
FROM table
供您更新...
UPDATE table
SET text2 = @text2
WHERE
text1 = @text1
在我解释您的问题时,您的源表(用于UI中的SELECT)仅来自一个数据库(?)。然后你的更新应该推送到每个数据库(?)。如果是,则使用上面的更新。如果没有 - 也许这个:
对于您的UI,您只想在其中显示唯一记录...
SELECT DISTINCT
db_name,
text1,
text2
FROM table
供您更新...
UPDATE table
SET text2 = @text2
WHERE
text1 = @text1
AND db_name = @db_name