2010-06-15 46 views
2

我想用另一個表中的另一行更新我的數據庫中的表。我有兩個參數,一個是ID,另一個是行號(因爲你可以從GUI中選擇你想要的行)我的棘手的SQL更新查詢不能很好地工作

這部分代碼工作正常,這將返回單行的一列。

(SELECT txtPageContent 
FROM (select *, Row_Number() OVER (ORDER BY ArchiveDate asc) as rowid 
      from ARC_Content Where ContentID = @ContentID) as test 
Where rowid = @rowID) 

它只是當我嘗試添加更新/設置它將無法正常工作。我可能缺少一些東西

UPDATE TBL_Content 
Set TBL_Content.txtPageContent = (select txtPageContent 
FROM (select *, Row_Number() OVER (ORDER BY ArchiveDate asc) as rowid 
      from ARC_Content Where ContentID = @ContentID) as test 
Where rowid = @rowID) 

感謝您的幫助! (我已經嘗試過1並沒有效果)

+0

你什麼錯誤? – 2010-06-15 12:37:12

+1

您可能需要將tbl_content添加到您的from語句中,將它加入到從中獲取數據的表中。 – 2010-06-15 12:38:09

+0

接受答案,如果它適合你 – 2010-07-27 06:39:28

回答

2

我發現你的更新有幾個問題。首先,我沒有看到您正在更新的表格的任何加入或選擇標準。這意味着表中的每一行都將更新爲新的值。那真的是你想要的嗎?

其次,GUI上的內容與數據庫中的內容之間的行號可能不匹配。即使您重現了用於在GUI中創建列表的查詢(無論如何這都是危險的,因爲它涉及保持更新和選擇代碼始終保持同步),所以有可能有人可以在時間之間插入,刪除或更新行您填寫您的列表框並將該行號發送到服務器以進行更新。使用PK(在你的情況下可能是ID)來確定哪一行用於更新會更好。

這就是說,我認爲下面就爲你(未經測試)工作:

;WITH cte AS (
    SELECT 
     txtPageContent, 
     ROW_NUMBER() OVER (ORDER BY ArchiveDate ASC) AS rowid 
    FROM 
     ARC_Content 
    WHERE 
     ContentID = @ContentID) 
UPDATE 
    TC 
SET 
    txtPageContent = cte.txtPageContent 
FROM 
    TBL_Content TC 
INNER JOIN cte ON 
    rowid = @rowID