2014-10-01 72 views
0

我在SQL中有两个表,每个表分别具有12列和16列。这四个中的两个都是常见的。将特定列的值从一个表插入到另一个表中的特定列

我需要的是我希望从一个表中的这4列的值插入到另一个表的列中。

我试过如下:

INSERT INTO TABLE2 (IDCOMPANY, 
       IDPLANT, 
       IDTRAINING, 
       IDEMPLOYEE, 
       IDGRADE, 
       IDDEPARTMENT, 
       IDDESIGNATION, 
       EMAIL, 
       STATUS, 
       CREATEDBY, 
       CREATEDON) 
     VALUES (@IDCOMPANY, 
       @IDPLANT, 
       @IDTRAINING, 
       @IDEMPLOYEE, 
     (SELECT IDGRADE, 
     IDDEPARTMENT, 
     IDDESIGNATION, 
     EMPLOYEE_EMAIL 
     FROM TABLE1 
     WHERE [email protected]) , 
       @STATUS, 
       @CREATEDBY, 
       GETDATE()) 

其他列的值从我的应用程序参数传递,但四列即IDGRADE,IDDEPARTMENT,IDDESIGNATION,EMPLOYEE_EMAIL我从另一个表希望。

可以这样做吗?我需要一些帮助。

更新:在运行时提供了以下错误上面的查询:

Msg 116, Level 16, State 1, Procedure USP_INSERT_HR, Line 219 
Only one expression can be specified in the select list when the subquery 
is not introduced with EXISTS. 
Msg 109, Level 15, State 1, Procedure USP_INSERT_HR, Line 217 
There are more columns in the INSERT statement than values specified in 
the VALUES clause. The number of values in the VALUES clause must match the 
number of columns specified in the INSERT statement. 

回答

0

您的代码应该有这样的结构。

INSERT INTO TABLE2 
(IDCOMPANY,IDPLANT,IDTRAINING,IDEMPLOYEE,IDGRADE,IDDEPARTMENT,IDDESIGNATION,EMAIL,STATUS,CREATEDBY,CREATEDON) 

SELECT @IDCOMPANY,@IDPLANT,@IDTRAINING,@IDEMPLOYEE,IDGRADE,IDDEPARTMENT,IDDESIGNATION,EMPLOYEE_EMAIL,@STATUS,@CREATEDBY,GETDATE()) 
FROM TABLE1 WHERE [email protected] 
0

编辑 - 现在问题有了很大的改进,请尝试以下内容(您可以使用select中的变量而不会出现问题)。 11列中的插入部分现在应该匹配值的11列 - 6由@提供变量,4由SELECT从GETDATE()

INSERT INTO TABLE2 (IDCOMPANY, IDPLANT, IDTRAINING, IDEMPLOYEE, IDGRADE, IDDEPARTMENT, 
        IDDESIGNATION, EMAIL, STATUS, CREATEDBY, CREATEDON) 
    SELECT @IDCOMPANY, @IDPLANT, @IDTRAINING, @IDEMPLOYEE, 
      IDGRADE, IDDEPARTMENT, IDDESIGNATION, EMPLOYEE_EMAIL, 
      @STATUS, @CREATEDBY, GETDATE() 
    FROM TABLE1 
    WHERE [email protected] 

提供FROM TABLE1和1 --- END EDIT ---

INSERT添加了全新的行,它出现了(尽管稍微含糊不清,所以我只是猜测)你的问题是你希望table1中4列的值被添加到记录中相同命名列的table2中已经存在那里

如果以上情况属实,则需要使用UPDATE(而不是INSERT)。类似于下面的东西应该接近工作。

UPDATE TABLE2 AS T2 
SET T2.IDCOMPANY = T1.IDCOMPANY, T2.IDPLANT = T1.IDPLANT, T2.IDTRAINING = T1.IDTTRAINING, 
T2.IDEMPLOYEE = T1.IDEMPLOYEE 
FROM TABLE2 JoinTbl 
INNER JOIN TABLE1 AS T1 
ON JoinTbl.EMPLOYEECODE = T1.EMPLOYEECODE 
相关问题