Sql 将int列复制到另一个具有正值的列

Sql 将int列复制到另一个具有正值的列,sql,sql-server,Sql,Sql Server,我有一列a,它有不同的int值,正数和负数。我想把a列的值复制到B列,如果a列的值是负数,就转换成正数 下面的方法不起作用 UPDATE myTable SET B = ABS(A); 谢谢试试看 UPDATE myTable SET B = case when A < 0 then -A else A end 只需添加一个计算列即可: alter table t add b as (abs(a)); 这样,b的值是在访问时计算出来的,因此您不必担心它与a不同步 假设a是数字类型,

我有一列a,它有不同的int值,正数和负数。我想把a列的值复制到B列,如果a列的值是负数,就转换成正数 下面的方法不起作用

UPDATE myTable SET B = ABS(A);
谢谢

试试看

 UPDATE myTable SET B = case when A < 0 then -A else A end

只需添加一个计算列即可:

alter table t add b as (abs(a));
这样,b的值是在访问时计算出来的,因此您不必担心它与a不同步


假设a是数字类型,b在表中定义,那么代码应该可以工作。

不要存储从其他列计算的值。要么创建一个视图,要么创建一个计算列。什么不工作意味着什么?!样本数据就可以了!当我使用updatemytable SET B=ABSA时;然后没有复制任何内容,新列保持0'sABS−2147483648?这在逻辑上看起来是正确的,但它不能解释为什么OP更简单的update语句不起作用。也许我们应该在回答之前等待反馈?@TimBiegeleisen ABS不起作用,因为它返回一个数字表达式,我猜,所以,我认为这是他想要的答案,虽然这确实解决了问题,但它仍然不是最好的方法,因为存储计算值并不理想。使用计算列是一种更好的方法。好吧,我有我使用这种方法的理由,我不要求最佳实践,这是对永远不会改变的数据的一次性更新again@SeanLange也许他只需要做一个简单的更新,而不是重写他的表