在sql server中插入和选择数据

Posted

技术标签:

【中文标题】在sql server中插入和选择数据【英文标题】:Insert and select data in sql server 【发布时间】:2017-11-14 06:53:27 【问题描述】:

我想从表 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

它作为插入语句的选择列表返回,具有较少的项目。我应该如何放置另一列的值?

【问题讨论】:

如果你只想插入两列(即empid和amount)值,那么也只从sp_test表中选择两列,为什么你从sp_test表中选择所有列值 【参考方案1】:

试试这个:

Insert into sp_emp(empid,amount)
Select empid,amount from sp_test

【讨论】:

【参考方案2】:

您可以使用以下内容,仅使用所需的列:

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

【讨论】:

谢谢!并且这些列实际上不可为空。那么如果要设置值,需要在select语句中设置值吗? @bennybenito - 查看更新。还请提供CREATE TABLE 命令,以便我们查看列的数据类型。 CREATE PROC sp_emp regisno varchar (20), empid varchar(10), year int, month int, week int, itemid varchar(50), amount decimal(15,2), paymentdate varchar (20 ) 看起来您的列可以为空(您没有设置NOT NULL)。 非常感谢!你的回答对我帮助很大。 :)【参考方案3】:

您必须使用 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

【讨论】:

【参考方案4】:

当源列表中的列数与目标中的列数不匹配时,会发生此错误。

例如,当您尝试插入到 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

如果数据类型中有任何未匹配项,那么您可以相应地转换源值

【讨论】:

谢谢!非常感谢您的帮助【参考方案5】:

你可以用这个。

INSERT INTO sp_emp( empid, amount )
SELECT EmpID, Amount
FROM sp_test

【讨论】:

【参考方案6】:

您只插入了您已获得值的特定字段。

插入 sp_emp(empid,amount) 从 sp_test 中选择 empid,amount

【讨论】:

【参考方案7】:

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 into sp_emp(empid,amount)
SELECT EmpID,Amount
FROM sp_test

另外,作为旁注,您不应将前缀sp_ 用于数据库中的任何内容。如果有的话,sp_ 很自然地与存储过程一起使用 - 但 Microsoft 将此前缀用于 SQL Server 中的系统存储过程。

【讨论】:

谢谢!我真的很感谢你的回答:)

以上是关于在sql server中插入和选择数据的主要内容,如果未能解决你的问题,请参考以下文章

Excel-VBA 访问 sql server 表进行选择和插入太慢

选择语句从 Netezza 数据库中获取数据并插入 SQL Server 数据库 (SSIS)

提高 SQL Server 中最新记录的选择和插入性能

从 SQL Server 中的选择查询错误插入

在特定文本值 SQL Server 之后选择行

如何在 SQL Server CE 数据库中插入多行? [关闭]