【问题标题】:Quickest way to copy records from one table to another sql server将记录从一个表复制到另一个 sql server 的最快方法
【发布时间】:2015-02-06 11:51:28
【问题描述】:

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

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

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

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

请指教。谢谢。

【问题讨论】:

  • 从 EMPLOYEE 表中选择特定列。
  • 由于 Employee 表中不存在这两个字段,我如何在 EmployeeVersion 表中填充 Month 和 Year?
  • 查看 GORDON 的解决方案

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


【解决方案1】:

为什么要将月份和年份存储在不同的列中?为什么不把插入数据的日期放在里面呢?

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;

【讨论】:

  • 感谢您的回答,有两种情况,在第一种情况下,我可以使用自动日期,但它可能不是一直都是当前日期,所以我将如何实施方案 2,我在哪里将日期参数传输到存储过程。因此,假设我将“@Month”、“@Year”作为参数传输到存储过程,我将如何更改插入语句以适应这些参数而不是月份(getdate())、年份(getdate())。它会简单地变成:'Insert Into EmployeeVersion (EmpID, EmpName, Month, Year) select EmpID, EmpName, '@month', '@year' from Employee'
  • 对不起,我应该提到评论框将“@Month”视为没有引号的用户,所以我添加了引号。感谢您的帮助。
【解决方案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

【讨论】:

    【解决方案3】:

    您必须在选择中指定列:

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

    问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      相关资源
      最近更新 更多