2013-08-22 46 views
0

顯示的代碼不會遞增1,所有記錄都顯示相同的字符串值。字符串值應該增加1

DECLARE @q_id NVARCHAR(50) 
begin 

SET @q_id='JEE_PHY_1' 

UPDATE oems_question7 SET q_id = SUBSTRING (@q_id ,0,CHARINDEX('_', @q_id,5) + 1) + ' ' + CONVERT(NVARCHAR,CONVERT(INT, SUBSTRING (@q_id ,CHARINDEX('_', @q_id,5) + 1, LEN(@q_id))) +1) 
WHERE id between 1 and 40 

end 
+0

'UPDATE'同時適用於(有效)所有行,作爲一個集合。它沒有被定義爲一次適用於一行。這意味着'SET'子句中賦值右邊的所有值都需要可並行計算。你能否給我們一個你想要應用變更的數據集的例子,以及預期的最終結果? –

回答

1

有了你的代碼是完全相同的值更新所有行。您應該應用ROW_NUMBER來爲每行分配一個明顯增加的數字,然後更新這些行。

DECLARE @q_id NVARCHAR(50) 
begin 

SET @q_id='JEE_PHY_1' 

;WITH UpdateCTE AS 
(
    SELECT q_id, 
      ROW_NUMBER() OVER(ORDER BY q_id) AS RowNum 
    FROM oems_question7 
    WHERE id between 1 and 40 
) 
UPDATE UpdateCTE 
SET q_id = SUBSTRING (@q_id ,0,CHARINDEX('_', @q_id,5) + 1) + ' ' + CONVERT(NVARCHAR,RowNum) 


end 
+1

如果沒有'OVER'子句,則不能擁有'ROW_NUMBER'。 –

+0

@Damien_The_Unbeliever所以非常真實......今天早上還太早... –