繁体   English   中英

SQL Server-使用同一表中的字段和其他表中的值,更新所有表记录中的字段

[英]SQL Server - Update field in all table records, using a field from the same table and values from other table

我有这种情况:

表格Territory

ID (int) - CODE (varchar) - NAME (varchar)

数据:

1 - GB - UNITED KINGDOM
2 - GB - ISLE OF MAN
3 - GB - NORTHERN IRELAND
4 - PT - PORTUGAL
5 - DE - GERMANY
6 - DE - HELGOLAND ISLAND

表格Rules

ID (int) - TERRITORY_CODES (varchar) - TERRITORY_IDS (varchar)

1 - 'GB,PT' - NULL
2 - 'DE,PT' - NULL

我知道第二张表不应该是这样,但是我没有选择更改它。

我想用表TERRITORY的ID填充TERRITORY_IDS列,并用逗号分隔。 例如:

表格Rules

ID (int) - TERRITORY_CODES (varchar) - TERRITORY_IDS (varchar)

1 - 'GB,PT' - '1,4'
2 - 'DE,PT' - '5,4'

每个地区代码有多个ID,但是每个地区表只需要一个ID,可以是第一个,没关系。

您想要做的是一个坏主意 知道这是一个坏主意是一件好事。 但是对于那些阅读此问题并且不理解为什么不好的人,这违反了第一范式(1NF)原理 这是所有列都应该是原子的,这意味着它们仅包含1个值和1个值。

让我们详细了解如何进行合并以进行救援。 由于我不知道为什么将'gb,pt''de,pt'进行分组,因此我没有将其包装在游标中以遍历整个表格。 但是您可以轻松地将其包装在光标中,并为您完成整个表的内容。

DECLARE @TERRITORY_Ids varchar(100)

SELECT @TERRITORY_Ids = COALESCE(@TERRITORY_Ids+ ', ', '') + 
  Id
FROM table_terrytory
WHERE code  in ('gb','pt')

INSERT INTO table_rules
SELECT 'gb,pt',@TERRITORY_Ids

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM