我有一个数据库表(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
请指教。感谢。
答案 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
问候。