[英]SQL updating multiple rows in 1 table
我有個問題。 我正在使用MS SQL Server Management Studio。
我有一個包含很多翻譯的詞典表。 我需要將完整的描述從一個languageID復制到另一個languageID。
下面的例子。
LanguageID | Description
2 | Some text
2 | More text
2 | Some more text
10 | *needs to be replaced
10 | *needs to be replaced
10 | *needs to be replaced
結果必須是這樣的:
LanguageID | Description
2 | Some text
2 | More text
2 | Some more text
10 | Some text
10 | More text
10 | Some more text
LanguageID 2和10的描述必須完全相同。
我當前的查詢遇到錯誤:
update tblDictionary
set Description = (Select Description from tblDictionary where
tblDictionary.LanguageID = 2)
where LanguageID = 10
消息512,級別16,狀態1,行1子查詢返回的值超過1。 當子查詢遵循=,!=,<,<=時,這是不允許的
,> =或將子查詢用作表達式時。 該語句已終止。
如果LanguageID 10的所有翻譯必須與languageID 2的翻譯完全相同,則可以輕松刪除ID 10的所有翻譯,然后重新插入。
像這樣
delete from tblDictionary where LanguageID = 10;
insert into tblDictionary (LanguageID, Description)
select 10, d.Description
from tblDictionary d
where d.LanguageID = 2
該方法還具有以下優勢:如果較少的記錄具有LanguageID = 10
,則對於LanguageID = 2
將在同一過程中對其進行更正。
如果tblDictionary中的列多於需要修改的插入語句
DECLARE @temp varchar(50)
DECLARE language_cursor CURSOR FOR
SELECT Description FROM tblDictionary
WHERE LanguageID = 2
ORDER BY Description;
OPEN language_cursor;
-- Perform the first fetch.
FETCH NEXT FROM language_cursor
into @temp;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
update TOP (1) tblDictionary
set Description = @temp
where Description = ''
and LanguageID = 10;
FETCH NEXT FROM language_cursor
into @temp;
END
CLOSE language_cursor;
DEALLOCATE language_cursor;
首先將所有languageID 10設置為空,然后循環遍歷languageID 2的所有描述以逐一更新為languageID 10,直到填充languageID10中的所有空白描述。
現在,如果您真的想要更新,即使我認為表的結構需要改進,類似的事情也應該起作用。
WITH l2 AS
(SELECT *,
ROW_NUMBER() OVER(PARTITION BY LanguageId ORDER BY Description ASC) AS No FROM tblDictionary WHERE LanguageId=2),
l10 AS
(SELECT *,
ROW_NUMBER() OVER(PARTITION BY LanguageId ORDER BY Description ASC) AS No FROM tblDictionary WHERE LanguageId=10)
UPDATE l10 SET Description = l2.Description
FROM l10
INNER JOIN l2 ON l10.No = l2.No
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.