Sql server 2008 字符串值应增加1
显示的代码没有增加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)
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不信者说得太对了……现在还太早了。。。