这是我的程序:

PROCEDURE add_values
AS
BEGIN

   INSERT INTO TABLE_A ...
   SELECT t.id, t.name FROM TABLE_C ("This selection will return multiple records")

END

当它在TableA中插入时,我想插入到另一个表(TableB)中,插入在tableA中插入的特定记录。

TableA和TableB中的列是不同的。在插入TableB之前调用函数是明智的 - 我想根据tableA中插入的id执行某些获取和设置吗?

有帮助吗?

解决方案

试试这个

<强>输入

declare @tblA table (id int,name varchar(20))
declare @tblB table (id int,name varchar(20))
declare @tblC table (id int identity,name varchar(20))
insert into @tblC 
    select 'name1' union all select 'name2' union all
    select 'name3' union all select 'name4' union all
    select 'name5' union all select 'name6' union all
    select 'name7' union all select 'name8' union all
    select 'name9' union all select 'name10' union all
    select 'name11' union all select 'name12' union all
    select 'name13' union all select 'name14' union all
    select 'name15' union all select 'name16' union all
    select 'name17' union all select 'name18' union all
    select 'name19' union all select 'name20' 

<强>查询

insert @tblA 
output INSERTED.id, INSERTED.Name
into @tblB 
select 
    id,name
from @tblC 
where id % 2 = 0

select * from @tblA
select * from @tblB

输出 [对于表格A&amp; B]

id name

2   name2
4   name4
6   name6
8   name8
10  name10
12  name12
14  name14
16  name16
18  name18
20  name20

基本上我将这些记录从TableC中插入TableA,其ID是偶数。然后使用Output子句将TableA中的值插入TableB

有关详细信息,请 OUTPUT子句

希望这是有道理的

其他提示

如果这是将数据插入表中的唯一方法,则可以创建触发器来执行此操作。 (否则它会在每个插页上运行)

或者您可以迭代一个光标,这将使您能够使用选择中的每个插入

光标示例

最佳技术取决于表定义和关联查询的详细信息。根据您问题中的信息,可能是这样的:

CREATE PROCEDURE add_values
AS
BEGIN
  BEGIN TRANS
    INSERT INTO TableA
      SELECT id, name FROM TableC
    INSERT INTO TableB
      SELECT id, name FROM TableC
  COMMIT
END

在MySQL中尝试 INSERT..SELECT ,如下所示:

INSERT INTO tableB SELECT * FROM tableA where id = LAST_INSERT_ID();

http:// dev .mysql.com / DOC / refman / 5.0 / EN / ANSI-DIFF-选择 - 进入 - table.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top