想要通过从同一个表中获取一行或多行,在具有计算列的表中插入行

时间:2012-05-21 10:57:14

标签: sql-server-2008

我有一个包含50列的表格。它插入了两行。我想通过从该表中获取值来添​​加第3行。

insert into Sample([IDX],[CODE]
      ,[NAME]
      ,[LABEL]
      ,[BILLING_ADDRESS]
      ,[PRIMARY_CONTACT_NAME]
      ,[PRIMARY_CONTACT_EMAIL]
      ,[SECONDARY_CONTACT_NAME]
      ,[SECONDARY_CONTATCT_EMAIL]
      ,[RDBMS_SERVER]
      ,[RDBMS_DB_NAME]
      ,[RDBMS_LOGIN]
      ,[RDBMS_PWD]
      ,[ETL_FOLDER_PATH])
values (select [IDX],[CODE]
      ,[NAME]
      ,[LABEL]
      ,[BILLING_ADDRESS]
      ,[PRIMARY_CONTACT_NAME]
      ,[PRIMARY_CONTACT_EMAIL]
      ,[SECONDARY_CONTACT_NAME]
      ,[SECONDARY_CONTATCT_EMAIL]
      ,[RDBMS_SERVER]
      ,[RDBMS_DB_NAME]
      ,[RDBMS_LOGIN]
      ,[RDBMS_PWD]
      ,[ETL_FOLDER_PATH] 
     from Sample where IDX = 2
) 

在上面的例子中,我只采用了几列。 在尝试执行此查询时,它显示如下消息。

  

INSERT语句中的列数多于指定的值   在VALUES条款中。 VALUES子句中的值的数量必须为   匹配INSERT语句中指定的列数。

此处标签字段为计算值。 [标签] = [代码] + [名称] 怎么解决?

由于

3 个答案:

答案 0 :(得分:1)

使用:

插入Sample([IDX],[CODE],[NAME],[BILLING_ADDRESS],[PRIMARY_CONTACT_NAME],[PRIMARY_CONTACT_EMAIL],[SECONDARY_CONTACT_NAME],[SECONDARY_CONTATCT_EMAIL],[RDBMS_SERVER],[RDBMS_DB_NAME],[RDBMS_LOGIN] ,[RDBMS_PWD],[ETL_FOLDER_PATH]) 选择[IDX],[CODE],[NAME],[BILLING_ADDRESS],[PRIMARY_CONTACT_NAME],[PRIMARY_CONTACT_EMAIL],[SECONDARY_CONTACT_NAME],[SECONDARY_CONTATCT_EMAIL],[RDBMS_SERVER],[RDBMS_DB_NAME],[RDBMS_LOGIN],[RDBMS_PWD],[来自Sample的IDL = 2

的ETL_FOLDER_PATH]

[Label]将自行计算,不需要插入。

答案 1 :(得分:0)

请勿使用values

insert into Sample([IDX],[CODE]
      ,[NAME]
      ,[LABEL]
      ,[BILLING_ADDRESS]
      ,[PRIMARY_CONTACT_NAME]
      ,[PRIMARY_CONTACT_EMAIL]
      ,[SECONDARY_CONTACT_NAME]
      ,[SECONDARY_CONTATCT_EMAIL]
      ,[RDBMS_SERVER]
      ,[RDBMS_DB_NAME]
      ,[RDBMS_LOGIN]
      ,[RDBMS_PWD]
      ,[ETL_FOLDER_PATH])
select [IDX],[CODE]
      ,[NAME]
      ,[LABEL]
      ,[BILLING_ADDRESS]
      ,[PRIMARY_CONTACT_NAME]
      ,[PRIMARY_CONTACT_EMAIL]
      ,[SECONDARY_CONTACT_NAME]
      ,[SECONDARY_CONTATCT_EMAIL]
      ,[RDBMS_SERVER]
      ,[RDBMS_DB_NAME]
      ,[RDBMS_LOGIN]
      ,[RDBMS_PWD]
      ,[ETL_FOLDER_PATH] 
     from Sample where IDX = 2

答案 2 :(得分:0)

如果要插入一行静态数据(不是查询结果),则应使用“值”。

要插入多个行(或单行),这些行是查询使用语法的结果:

insert into (column, column, ...)
  select column, column
    from xxxx