Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:如何插入到两个不同的表中_Sql_Sql Server 2008 - Fatal编程技术网

SQL Server:如何插入到两个不同的表中

SQL Server:如何插入到两个不同的表中,sql,sql-server-2008,Sql,Sql Server 2008,这似乎是一个非常简单的答案,但由于某些原因,我无法思考我应该如何实现这一点 我有两张不同的桌子: 运动 客户活动 其中,dbo.Campaign是活动的所有详细信息,dbo.Campaign\u Customer基本上是一个汇总表,其中包含活动ID,客户ID,创建日期,以及删除日期(如果有) 因此,当我要在我的dbo.Campaign表中插入一条新记录时,我需要能够使用它生成的CampaignID在我的dbo.Campaign\u Customer表中创建一条记录 我知道这是可能的,但我不知道正

这似乎是一个非常简单的答案,但由于某些原因,我无法思考我应该如何实现这一点

我有两张不同的桌子:

  • 运动
  • 客户活动
  • 其中,
    dbo.Campaign
    是活动的所有详细信息,
    dbo.Campaign\u Customer
    基本上是一个汇总表,其中包含
    活动ID
    客户ID
    创建日期
    ,以及
    删除日期
    (如果有)

    因此,当我要在我的
    dbo.Campaign
    表中插入一条新记录时,我需要能够使用它生成的
    CampaignID
    在我的
    dbo.Campaign\u Customer
    表中创建一条记录


    我知道这是可能的,但我不知道正确的方法。有什么帮助吗?

    您需要在事务中有两条独立的insert语句。如果您的活动Id是标识列,则可以在首次插入后使用select中的scope_identity函数获取其值

    BEGIN TRANSACTION
    INSERT INTO dbo.Campain (x, y, z) VALUES (x, y, z)
    DECLARE @id int
    SELECT @id = scope_identity()
    
    INSERT INTO dbo.Campaign_Customer (CampaignId, x, y) VALUES (@id, x, y)
    COMMIT
    

    您需要在事务中有两个单独的insert语句。如果您的活动Id是标识列,则可以在首次插入后使用select中的scope_identity函数获取其值

    BEGIN TRANSACTION
    INSERT INTO dbo.Campain (x, y, z) VALUES (x, y, z)
    DECLARE @id int
    SELECT @id = scope_identity()
    
    INSERT INTO dbo.Campaign_Customer (CampaignId, x, y) VALUES (@id, x, y)
    COMMIT
    

    您可以创建触发器来执行此操作:

    CREATE TRIGGER [Campaign_Trigger] on dbo.Campaign
    AFTER INSERT AS
    INSERT INTO dbo.Campaign_Customer (CampaignId, x, y)
    VALUES (t.CampaignID, t.x, t.y)
    FROM Inserted t
    

    您可以创建触发器来执行此操作:

    CREATE TRIGGER [Campaign_Trigger] on dbo.Campaign
    AFTER INSERT AS
    INSERT INTO dbo.Campaign_Customer (CampaignId, x, y)
    VALUES (t.CampaignID, t.x, t.y)
    FROM Inserted t
    

    那么,我应该将此事务放在存储过程中吗?如果您正在为CRUD使用存储过程,但它不是必需的,这可能是最好的。那么,我应该将此事务放在存储过程中吗?如果您正在为CRUD使用存储过程,但它不是必需的,这可能是最好的。