2011-08-31 34 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