在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 表进行选择和插入太慢