【问题标题】:insert data to table from select statment从 select 语句向表中插入数据
【发布时间】:2013-12-25 06:24:36
【问题描述】:

我在两个表(persons)和(payments)上工作。payments 表包含列(payment_id,payment_value,payment_class,date,name,person_id)现在我想通过从 person 表中选择插入数据到付款中

insert into Payments(payment_id , payment_value , payment_class , date , name , person_id)
select person_id , person_name , person_status from Persons where person_status = 'sub'

如何向从人员表中选择的每个人插入付款..

【问题讨论】:

  • 您要插入什么值?您告诉插入您将填充所有这些列,但是您从 person 表中选择了一些其他不同的值。那行不通
  • 我只想用日期值填充日期列,稍后我将声明它,所有其他列我希望它为空
  • 想用什么填充日期值?当前时间?
  • 是..日期值与当前时间
  • 你也想要person_id,对吧?以及付款中的姓名,是来自一个人吗?

标签: sql-server-2008


【解决方案1】:

根据您的要求,以下查询为每个人在表支付中插入一条当前日期和所有其他列为空的记录

INSERT INTO Payments (payment_id,payment_value,payment_class,date,name,person_id)
SELECT NULL, NULL, NULL, GETDATE(), NULL, NULL
FROM Persons
WHERE person_status = 'sub';

如果你想直接从表persons中提取person_id,你可以这样做:

INSERT INTO Payments (payment_id,payment_value,payment_class,date,name,person_id)
SELECT NULL, NULL, NULL, GETDATE(), NULL, person_id
FROM Persons
WHERE person_status = 'sub';

【讨论】:

  • 非常感谢 .. 另一件事 .. 如果我想将 null 更改为参数,请从文本框中获取其值 .. 并且 payment_id 是主键 .. 我如何将 1 增加到表中的最大值每条新记录
  • 你应该将它作为标识列(see this answer on how to change it)并且根本不传递它,它会自动递增。
  • 好的,我知道,但身份对我来说是个问题..我希望数字完整...不是当我删除第三行时..新行将是 4..我不想要那个!!!
  • @user3038625。您可以计算该查询中的最大值,但假设您有 5 并删除数字 2,当您选择最大值时,它将是 5,然后您执行 +1,它插入为 6,但您仍然会有一个洞在你的身份证上。身份是处理这个问题的最好方法。如果您需要对它们进行排序,并且您需要使用排序的列来获取记录,就好像没有漏洞一样,您可以使用 rank()(在 stackoverflow 中查找,有很多示例)
猜你喜欢
  • 2022-11-20
  • 1970-01-01
  • 2019-12-24
  • 2019-12-10
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多