我想在将用户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");
答案 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
同样,这是基于我对您的问题的理解(或缺乏理解)。