我想从表sp_test中插入两列数据; (empid和amount)到另一个表sp_emp(regisno,empid,itemid,year,month,week,amount,paymentdate)。
这是我使用的查询
Insert into sp_emp(regisno,empid,itemid,year,month,week,amount,paymentdate)
Select * from sp_test
并返回,因为insert语句的选择列表中的项目较少。我该如何将值放在另一列?
答案 0 :(得分:3)
尝试使用:
Insert into sp_emp(empid,amount)
Select empid,amount from sp_test
答案 1 :(得分:1)
您可以仅使用所需的列来使用以下内容:
INSERT INTO sp_emp (empid, amount)
SELECT empid, amount FROM sp_test
仅当INSERT INTO
的其他列可以为空或sp_emp
值可用时,此DEFAULT
命令才有效。如果列不可为空并且没有设置DEFAULT
值,则必须为列指定有效值。如果没有默认值且列不可为空,则只需在INSERT INTO
列列表中定义列。
要设置值,您可以将值添加到SELECT
列列表中作为值:
INSERT INTO sp_emp (empid, amount, regisno, itemid, year, month, week,paymentdate)
SELECT empid, amount, 1, 1, 2017, 11, 40, '2017-11-14' FROM sp_test
答案 2 :(得分:0)
您必须使用NULL
或0来表示其余列。
尝试以下方法:
Insert into sp_emp(regisno,empid,itemid,year,month,week,amount,paymentdate)
Select NULL,EmpID,NULL,NULL,NULL,NULL,Amount,NULL from sp_test
答案 3 :(得分:0)
当源列表中的列数与目标上的列数不匹配时,会发生此错误。
例如,当您尝试插入5列或表但在select语句或值中时,您只指定了4列,或者您已经给出了6列,那么您将得到相同的错误。
此处,您的查询正在尝试将值插入到表sp_emp上的8列中,为此,您将从表sp_test中选择所有列。因此,当您这样做时,您必须确保列数,有顺序和数据类型匹配目标,否则您应指定列名而不是*。所以我改变了你的脚本如下 - 假设两个表中的列名相同
Insert into sp_emp(regisno,empid,itemid,year,month,week,amount,paymentdate)
SELECT regisno,empid,itemid,year,month,week,amount,paymentdate FROM sp_test
如果数据类型中存在任何未匹配,则可以相应地转换源值
答案 4 :(得分:0)
你可以使用它。
INSERT INTO sp_emp( empid, amount )
SELECT EmpID, Amount
FROM sp_test
答案 5 :(得分:0)
insert子句的列列表必须等于select子句的列列表(列数和数据类型)。
如果sp_emp
列允许空值,则可以将NULL
指定为值。如果您的列具有默认值,则可以使用关键字DEFAULT
作为值来设置它们:
Insert into sp_emp(regisno,empid,itemid,year,month,week,amount,paymentdate)
SELECT DEFAULT,EmpID,NULL,NULL,NULL,NULL,Amount,NULL
FROM sp_test
但是,更好的选择是简单地从insert子句列列表中省略这些列 - 这将创建一个更简单的语句。
Insert into sp_emp(empid,amount)
SELECT EmpID,Amount
FROM sp_test
另外,作为旁注,您不应该在数据库中使用前缀sp_
。如果有的话,sp_
自然会与存储过程一起使用 - 但Microsoft将此前缀用于SQL Server中的系统存储过程。
答案 6 :(得分:0)
您只插入了您已获得的特定字段。
插入sp_emp(empid,amount) 从sp_test中选择empid,amount