帮助数据库更新的逻辑流程

时间:2011-08-31 15:49:03

标签: sql database logic

我有一个包含以下字段的数据库表...

key,
db_name,
string_ID_in_DB,
text1,
text2

text1充满了重复项,我想展示一次,因为用户需要根据text1内容填充text2。

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

非常感谢有关如何执行此操作的任何建议。

感谢,

2 个答案:

答案 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