在sql server中插入并选择数据

时间:2017-11-14 06:53:27

标签: sql sql-server

我想从表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语句的选择列表中的项目较少。我该如何将值放在另一列?

7 个答案:

答案 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