表ta的栏目如下:
A,B,C
然后我将列d添加到表ta(下面代码的列d值回复以生成)
select a+'-'+ rtrim(b) +'-'+ cast(row_number() over(order by a) as varchar) +'-tanew' as d from main
我试图插入,但它将覆盖列a,b,c中的exsits值。我该如何保持a,b,c的原始数据并插入d,就像上面显示的代码一样?
非常感谢!
这是我案例的最终解决方案:
update ta set d = [a] +'-' + rtrim([b]) + [c] + '-tanew'
答案 0 :(得分:0)
如果您使用ssms,请尝试:::
alter table main
add d varchar(max)
update main
set d =
(select a+'-'+ rtrim(b) +'-'+ cast(row_number() over(order by a) as varchar) +'-tanew' from main )
--i assume col a and b are already in varchar format
答案 1 :(得分:0)
您不应创建和更新row_number
值的列。
插入或删除行或更新列a
只需使用视图
CREATE VIEW dbo.YourViewName AS
(
SELECT *,
concat(a,'-', b,'-', row_number() over(ORDER BY Name)) AS d
FROM dbo.YourTable t
)
并选择数据
SELECT * FROM dbo.YourViewName vt
注意:
Row_number
仅用于order by
或select
子句concat
作为和字符串。答案 2 :(得分:0)
在SQL Server中,您将使用可更新的CTE:
with toupdate as (
select t.*,
(a + '-' + rtrim(b) + '-' + cast(row_number() over (order by a) as varchar(255)) + '-tanew'
) as new_d
from main
)
update toupdate
set d = new_d;
注意:每当您使用varchar()
时,总是包含一个长度。 SQL Server根据上下文将长度默认为不同的值。由此类默认值引起的错误很难调试。