Sql server 2008 字符串值应增加1

Sql server 2008 字符串值应增加1,sql-server-2008,Sql Server 2008,显示的代码没有增加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,所有记录都显示相同的字符串值

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

使用代码,您将使用完全相同的值更新所有行。您应该应用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

UPDATE
同时(有效地)应用于所有行(作为一个集合)。它没有定义为一次应用于一行。这意味着
SET
子句中赋值右侧的所有值都需要并行计算。你能给我们一个你想应用更改的数据集和预期的最终结果的例子吗?如果没有
OVER
子句,你就不能有
ROW\u NUMBER
。@Damien\u不信者说得太对了……现在还太早了。。。