sql-server - MS SQL 2012 插入触发器 : Insert all rows from a table

标签 sql-server

如果这个问题太标准,我很抱歉,但我无法找到有效的方法

我有 3 个表 CustomerCustomerProjectStandardProject

  • StandardProject 表包含 Customer 表中每个客户必须拥有的所有项目的列表。

我的逻辑是,当一个新客户插入Customer表时,它将触发并将StandardProject中的所有项目插入CustomerProject

Create Table [Customer]
(
   [CID] INTEGER PRIMARY KEY IDENTITY(1,1)
 , Customer   VARCHAR(50) NOT NULL UNIQUE 
)


Create Table [CustomerProject]
(
   ProjectID INTEGER PRIMARY KEY IDENTITY(1,1)
 , [CID]     INTEGER FOREIGN KEY REFERENCES [Customer](CID)
 , Project   VARCHAR(50) NOT NULL 
 , CONSTRAINT UN_Customer_Project UNIQUE([CID], Project)
)


Create Table [StandardProject]
(
    ProjectID INTEGER PRIMARY KEY IDENTITY(1,1)
 ,  Project   VARCHAR(50) NOT NULL UNIQUE
)

INSERT INTO [StandardProject](Project) VALUES('PROJECT 1')
INSERT INTO [StandardProject](Project) VALUES('PROJECT 2')
INSERT INTO [StandardProject](Project) VALUES('PROJECT 3')

问题:当我插入Customer = 'My Customer'时,是否有可能的触发器可以添加'Project 1''Project 2' 'Project 3' 放入 CustomerProject 表中?

实际上,StandardProject 可以有相当多的项目,并且这些项目可以更改频率。

CREATE TRIGGER InsertStandardProjects ON [Customer]
FOR INSERT
AS

INSERT INTO [CustomerProject]([CID], [Project])...

最佳答案

类似这样的事情。

CREATE TRIGGER InsertStandardProjects ON [Customer]
FOR INSERT
AS
INSERT INTO [CustomerProject]([CID], [Project])
SELECT i.CID, St.Project
    FROM inserted i,StandardProject St 


--检查

INSERT INTO Customer (Customer) VALUES ('MyNewCustomer')

SELECT * FROM [Customer]
SELECT * FROM [CustomerProject]

Output:

CID Customer
1   MyNewCustomer

ProjectID   CID Project
1   1   PROJECT 1
2   1   PROJECT 2
3   1   PROJECT 3

关于sql-server - MS SQL 2012 插入触发器 : Insert all rows from a table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56380691/

相关文章:

sql-server - 如何更新activeX脚本任务

sql - 在 SQL Server 中 not(columnName ='value' ) 和 columnName< >'value' 之间有什么区别吗?

sql-server - 如何执行存储过程并将结果存储在未知模式的临时表中

sql - SQL 中三列中最大的列

sql-server - 没有 Entity Framework 的 .NET Core 6 SQL Server 连接

python - 将 None 作为参数值传递给 SQL Server 时出现意外行为

mysql - 如何实现从 mySQL 操作数据库到 Azure SQL 数据库的更新以进行报告

sql-server - 将多行转换为具有指定标题的列

sql - 尝试在没有动态 SQL (sql server) 的情况下完成

sql-server - SQL Server 分区表和 Entity Framework