将记录从一个表复制到另一个SQL Server的最快方法

时间:2015-02-06 11:51:29

标签: sql sql-server sql-server-2008 sqlbulkcopy

我有一个数据库表(Employee),其中包含以下字段:EmpID,EmpName。我有第二个表(EmployeeVersion),其中包含以下字段:PKID(auto),EmpID,EmpName,Month,Year。

将数据从Employee表复制到EmployeeVersion表的最快方法是什么。月份,年份将包含复制数据的月份和年份,或者从c#代码发送到存储过程(@Month,@ Year)的值。请为这两种情况提供解决方案。

据我所知,我不能使用以下语句,因为两个表中的列数不匹配:

Insert Into EmployeeVersion (EmpID, EmpName, Month, Year) select * from Employee

请指教。感谢。

3 个答案:

答案 0 :(得分:3)

为什么要将月份和年份存储在不同的列中?为什么不在插入数据时输入日期?

Insert Into EmployeeVersion (EmpID, EmpName, Month, Year)
    select EmpID, EmpName, month(getdate()), year(getdate())
    from Employee;

请注意,您可以自动分配名为CreatedAt的列。您可以将其定义为:

create table . . .
    CreatedAt datetime not null default getdate()

然后insert看起来像:

Insert Into EmployeeVersion (EmpID, EmpName)
    select EmpID, EmpName
    from Employee;

答案 1 :(得分:2)

您应该在select语句中指定列,并使用Month, Year转义用作列名[]的保留字:

Insert Into EmployeeVersion (EmpID, EmpName, [Month], [Year])  
select EmpId, EmpName, MONTH(GETDATE(), YEAR(GETDATE()) from Employee

存储过程:

CREATE PROCEDURE [dbo].[CopyEmployee] 
    @Month INT,
    @Year INT
AS
BEGIN
    SET NOCOUNT ON;

    Insert Into EmployeeVersion (EmpID, EmpName, [Month], [Year]) 
    select EmpId, EmpName, @Month AS [Month], @Year AS [Year] from Employee;
END
GO

答案 2 :(得分:0)

您必须在选择中指定列:

Insert into EmployeeVersion SELECT EmpId, EmpName, MONTH(getdate()), YEAR(getdate()) from Employee

问候。