将记录从一台 table 复制到另一台 sql 服务器的最快方法

Quickest way to copy records from one table to another sql server

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

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

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

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

请指教。谢谢

您必须在 select 中指定列:

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

此致。

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

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;

您应该在 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