2015-02-06 50 views
1

我有一個數據庫表(Employee),其中包含以下字段:EmpID,EmpName。我有第二個表(EmployeeVersion),包含以下字段:PKID(auto),EmpID,EmpName,Month,Year。將記錄從一個表複製到另一個sql服務器的最快方法

什麼是將Employee表中的數據複製到EmployeeVersion表的最快方法。 Month,Year要麼包含數據被複制的月份和年份,要麼包含從C#代碼發送到存儲過程(@Month,@Yarar)的值。請爲這兩種情況提供解決方案。

據我知道,我不能用下面的語句,因爲列數不兩個表中的匹配:

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

請指點。謝謝。

+0

從EMPLOYEE表中選擇特定列。 – 2015-02-06 11:52:35

+0

如何在EmployeeVersion表中填充Month&Year,因爲Employee表中不存在這兩個字段? – learner 2015-02-06 12:00:31

+0

檢查GORDON的解決方案 – 2015-02-06 12:04:37

回答

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 
0

您必須選擇指定列:

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

問候。

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; 
+0

感謝您的回答,有兩種情況,第一種情況下我可以使用自動日期,但它可能不是當前日期,所以我將如何實現方案2,我將日期參數存儲過程。因此,假設我將'@Month','@Yar'作爲參數傳遞給存儲過程,我將如何更改Insert語句以容納這些參數,而不是月(getdate()),year(getdate())。它將簡單地變成:'Insert into EmployeeVersion(EmpID,EmpName,Month,Year) 從Employee' – learner 2015-02-06 12:08:00

+0

@learner中選擇EmpID,EmpName,'@month','@year' 。 。 。你不會把值放在引號中。 – 2015-02-06 13:03:34

+0

對不起,我應該提到,評論框被視爲沒有引號的用戶'@Month',所以我加了引號。謝謝你的幫助。 – learner 2015-02-06 13:59:44

相關問題