2011-08-31 57 views
0

我有以下字段的数据库表...帮助与数据库的逻辑流程更新

key, 
db_name, 
string_ID_in_DB, 
text1, 
text2 

text1为充满重复的,我想一旦表现出来,因为用户需要填充文本2基于text1内容。

然后我需要更新每个db_name数据库中的text2。如果我只显示非重复的text1字段,我从显示中消除了20,000条记录,但我需要弄清楚如何跟踪这些记录,以便我可以在相应的db_name数据库中更新它们。

任何建议如何做到这一点将不胜感激。

谢谢,

+0

使用ROW_NUMBER()OVER Text1 and delete where> 1 –

+0

不知道我理解你的评论,你能否进一步解释? – htm11h

回答

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 

OUTPUT:

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) 
0

为了您的UI ,要显示的唯一记录......

SELECT DISTINCT 
    text1, 
    text2 
FROM table 

为您更新...

UPDATE table 
    SET text2 = @text2 
WHERE 
    text1 = @text1 

当我解释你的问题时,你的源表(用于UI中的SELECT)仅来自一个数据库(?)。然后你的更新应该推送到每个数据库(?)。如果是这样,那么使用上面的更新。如果没有 - 也许这:

对于你的用户界面,在这里你要显示的唯一记录......

SELECT DISTINCT 
    db_name, 
    text1, 
    text2 
FROM table 

为您更新...

UPDATE table 
    SET text2 = @text2 
WHERE 
    text1 = @text1 
    AND db_name = @db_name