하나의 테이블에서 다른 SQL 서버로 레코드를 복사하는 가장 빠른 방법

sql sqlbulkcopy sql-server sql-server-2008

문제

나는 다음과 같은 필드를 가진 데이터베이스 테이블 (Employee)을 가지고있다 : EmpID, EmpName. PKID (자동), EmpID, EmpName, 월, 연도 필드가있는 두 번째 테이블 (EmployeeVersion)이 있습니다.

Employee 테이블에서 EmployeeVersion 테이블로 데이터를 복사하는 가장 빠른 방법은 무엇입니까? 월, 연도에는 데이터가 복사 된 월 또는 연도 또는 C # 코드에서 저장 프로 시저 (@Month, @Year)로 값이 전송됩니다. 두 가지 시나리오에 대한 솔루션을 제공하십시오.

내가 아는 한, 열의 수가 두 테이블 모두에서 일치하지 않기 때문에 다음 명령문을 사용할 수 없습니다.

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

제발 조언. 감사.

수락 된 답변

select 문에 열을 지정하고 열 이름으로 사용되는 예약어를 이스케이프해야합니다. Month, Year with [] :

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

인기 답변

왜 달과 연도를 별도의 열에 저장하고 있습니까? 데이터가 삽입 될 때 날짜를 입력하는 것이 가장 좋은 이유는 무엇입니까?

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;


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.