如何在插入数据的同时将一个表复制到另一个表

时间:2019-01-15 20:55:54

标签: c# sql-server

我想在将用户ID复制到另一个表的同时向其中插入数据

SqlCommand cmd = new SqlCommand(@"INSERT INTO Attendance (User_ID, Month, Year, Status) SELECT User_ID FROM Users WitH Values(@Month, @Year, @Status)", con);

cmd.Parameters.AddWithValue(@"Month", cmbMonth.Text);
cmd.Parameters.AddWithValue(@"Year", cmbYear.Text);
cmd.Parameters.AddWithValue(@"Status", "Pending");

2 个答案:

答案 0 :(得分:3)

INSERT命令有两种形式:

(1),您可以使用所有值,如文字或SQL Server变量-在这种情况下,可以使用INSERT .. VALUES()方法:

DECLARE @User_ID INT;
SELECT @User_ID = User_ID
FROM dbo.Users
WHERE (some condition here)   -- most likely

INSERT INTO dbo.Attendance (User_ID, [Month], [Year], Status) 
VALUES (@User_ID, @Month, @Year, @Status)

注意:我建议始终明确指定要向其中插入数据的列列表-这样,如果您的表突然有一个额外的列,或者如果您的表有一个IDENTITY或计算列。是的-需要做更多工作-一次-但是您可以使INSERT语句尽可能的可靠,并且如果您的桌子不需经常摆弄变化。

(2),如果您将所有值都用作文字和/或变量,但您想依赖于另一个表,多个表或视图以提供值,然后可以使用INSERT ... SELECT ...方法:

INSERT INTO dbo.Attendance (User_ID, [Month], [Year], Status) 
    SELECT User_ID, @Month, @Year, @Status
    FROM dbo.Users 

在这里,您必须在SELECT中定义与INSERT一样多的项目-这些项目可以是表(或视图)中的列,也可以是是文字或变量。再次:明确提供要插入的列的列表-参见上文。

您可以使用另一个-但是您不能不能将两者混用-您不能使用VALUES(...)然后进行SELECT查询在值列表的中间-选择两个值之一-坚持下去。而且WITH VALUES(....)构造完全不是有效的T-SQL代码...

有关更多详细信息和进一步的深入介绍,see the official MSDN SQL Server Books Online documentation on INSERT是有关与SQL Server相关的所有所有问题的好资源!

答案 1 :(得分:0)

我不确定我是否完全理解您的问题,但是,如果您只是想在将记录插入另一个表的同时将user_id插入另一个表,则可以向该表添加INSERT TRIGGER首先接收数据,然后将记录添加到任何其他表中。

例如,假设您有一个Table1,该表也应将数据插入表2中。您可以通过将此触发器添加到Table1中来完成此操作:

CREATE TRIGGER trg_Table1_ins 
   ON  dbo.Table1 
   AFTER INSERT
AS 
BEGIN

    SET NOCOUNT ON;

    INSERT INTO dbo.Table2 ( [user_id] )
    SELECT [user_id] FROM inserted;

END
GO

同样,这是基于我对您的问题的理解(或缺乏理解)。