помочь с логикой для обновления базы данных - PullRequest
0 голосов
/ 31 августа 2011

У меня есть таблица базы данных со следующими полями ...

key,
db_name,
string_ID_in_DB,
text1,
text2

text1 полон дубликатов, и я хотел бы показать это один раз, так как пользователям необходимо заполнять text2 на основе содержимого text1.

Затем мне нужно обновить text2 в каждой базе данных db_name.Если я отображаю только не повторяющиеся поля text1, я исключаю из отображения 20 000 записей, но мне нужно выяснить, как их отслеживать, чтобы я мог затем обновить их в соответствующих базах данных db_name.

Любые предложения покак это сделать, будет принята с благодарностью.

спасибо,

Ответы [ 2 ]

0 голосов
/ 31 августа 2011

Для вашего интерфейса, где вы хотите отображать только уникальные записи ...

SELECT DISTINCT
   text1,
   text2
FROM table

Для вашего обновления ...

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

Когда я интерпретирую ваш вопрос, ваша исходная таблица (для вашего SELECT в пользовательском интерфейсе) поступает только из одной базы данных (?). И тогда ваше обновление должно быть отправлено в каждую базу данных (?). Если так, то используйте обновление выше. Если нет - может быть, это:

Для вашего интерфейса, где вы хотите отображать только уникальные записи ...

SELECT DISTINCT
   db_name,
   text1,
   text2
FROM table

Для вашего обновления ...

UPDATE table
   SET text2 = @text2
WHERE
   text1 = @text1
   AND db_name = @db_name
0 голосов
/ 31 августа 2011

Я действительно не уверен, что вы ищете, вопрос не очень ясен.Кроме того, не все 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...