SQL SERVER为现有表的每一行插入新列值

SQL SERVER为现有表的每一行插入新列值,sql,sql-server,Sql,Sql Server,我有一个现有的客户表。我想根据我们公司提供的所有服务为每个客户添加一个新行 原样: Customer - ID Freddy - 123 将是: Customer - ID - Service Freddy - 123 - Serv1 Freddy - 123 - Serv2 Freddy - 123 - Serv3 等等 目前,我一直在处理以下内容,但它没有给出所需的输出: INSERT INTO Customers (Service) VALUES ('Serv1'), ('Serv2

我有一个现有的客户表。我想根据我们公司提供的所有服务为每个客户添加一个新行

原样:

Customer - ID
Freddy - 123
将是:

Customer - ID - Service
Freddy - 123 - Serv1
Freddy - 123 - Serv2
Freddy - 123 - Serv3
等等

目前,我一直在处理以下内容,但它没有给出所需的输出:

INSERT INTO Customers (Service) 
VALUES ('Serv1'), ('Serv2'), ('Serv3')

您需要某种类型的
连接
,在本例中是
交叉连接

SELECT c.Customer, c.Id, v.s
FROM Customers c CROSS JOIN
     (VALUES ('Serv1'), ('Serv2'), ('Serv3')) v(s);

但是,将其插入原始表中是没有意义的。该表只有两列,但您似乎需要第三列。

您需要某种类型的
连接,在本例中是
交叉连接

SELECT c.Customer, c.Id, v.s
FROM Customers c CROSS JOIN
     (VALUES ('Serv1'), ('Serv2'), ('Serv3')) v(s);

但是,将其插入原始表中是没有意义的。该表只有两列,但您似乎想要第三列。

您只有两列,所以创建第三列

转到表>>设计>>并创建称为服务的第三行

现在,请执行以下操作:

UPDATE Customers
SET service='serv1'
WHERE Customer='Freddy '
记住:
WHERE子句指定应更新的一条或多条记录。如果省略WHERE子句,所有记录都将更新

您只有两列,所以创建第三列

转到表>>设计>>并创建称为服务的第三行

现在,请执行以下操作:

UPDATE Customers
SET service='serv1'
WHERE Customer='Freddy '
记住:
WHERE子句指定应更新的一条或多条记录。如果省略WHERE子句,所有记录都将更新

在我看来,这是不明智的。复制客户记录会产生冗余数据。如果在客户和服务之间有一个用这些数据填充的关联表,而不是复制客户数据,那不是更好吗?您这样做是在减少数据库的正常形式,如果它是现有的应用程序,当系统可能不希望同一客户有重复记录时,可能会对现有系统造成损害。@xQbert 100%同意。我只是想做一个文档,我可以传播给业务用户,这样他们就可以根据位置、覆盖范围等变量填充每个客户的每项服务的费率。。。我有一个customer master的规范化版本,一旦完成,我会将其与服务表的规范化版本相关联。复制客户记录会产生冗余数据。如果在客户和服务之间有一个用这些数据填充的关联表,而不是复制客户数据,那不是更好吗?您这样做是在减少数据库的正常形式,如果它是现有的应用程序,当系统可能不希望同一客户有重复记录时,可能会对现有系统造成损害。@xQbert 100%同意。我只是想做一个文档,我可以传播给业务用户,这样他们就可以根据位置、覆盖范围等变量填充每个客户的每项服务的费率。。。我有一个customer master的规范化版本,一旦完成,我会将其与服务表的规范化版本相关联。非常感谢,这非常有效。原来的表有两个以上的列,但我不想在演示中拼写所有的列。非常感谢,这非常有效。原始表有两个以上的列,但我不想在演示中拼写所有列。我知道您来自何处,但对于本练习,我希望在本例中更新所有记录。正如我刚才所解释的,我正在尝试创建一个模板,以便在收到业务用户的输入后传递给他们,以便进行规范化。我了解您的来源,但对于本练习,我希望在这种情况下更新所有记录。正如我刚才所解释的,我正在尝试创建一个模板,以便在获得业务用户的输入后,将其传递给业务用户,以实现规范化。