如何用来自同一行的每行另外两个其他列的连接来更新表中的列?

时间:2019-01-17 03:51:09

标签: sql sql-server

只是试图弄清楚如何编写一个T-SQL查询,该查询允许我使用其他两列中的两个值的组合来更新列值(称为range),依次针对表中的每一行

我尝试了以下操作,但是它所做的就是将表中的顶行值作为参数,并使用相同的值(无论范围如何)更新“每”单列。

UPDATE dbo.levels
SET level_1_range = CONCAT(min_level_1, '-', max_Level_1)

我希望它看起来像这样:

date     | min_level_1 | max_level_1 | level_1_range
---------+-------------+-------------+---------------    
01/01/18 |      1      |     10      | 1-10
02/02/18 |     20      |     25      | 20-25

但是我的代码返回的更像是

date     | min_level_1 | max_level_1 | level_1_range
---------+-------------+-------------+--------------
01/01/18 |     1       |     10      | 1-10
02/02/18 |    20       |     25      | 1-10

2 个答案:

答案 0 :(得分:1)

在这里看不到不使用计算字段的原因。

Alter Table dbo.levels Add level_1_range_computed As CONCAT(min_level_1, '-', 
max_Level_1) PERSISTED; 

来自msdn:

  

计算列是虚拟列,除非该列标记为PERSISTED,否则它不会物理存储在表中。计算列表达式可以使用其他列中的数据来计算其所属列的值。您可以在SQL Server中为计算列指定表达式

答案 1 :(得分:0)

简单的+可以在SQL Server中使用,只要它们都是字符串。这样简单

convert(varchar,min_level_1)+'-'+convert(varchar,max_Level_1)

会做到的。