想知道是否有一种方法可以将一行插入另一个表中,但一列除外?
对于有限数量的列,这当然很容易,但是当列数增加时,列出所有列时会很烦人。
我正在考虑以下方面:
Insert into table
select * replace col1 with current date
from table
where yada yada yada
一种可能性是复制一行并执行和更新,但是,假设由于索引或其他原因,这不是一个选项。
有任何想法吗?
编辑:这是DB2 v10,但问题出于纯粹的好奇心。只是想知道是否可能......
使用Oracle
DECLARE
CURSOR CUR_D IS
SELECT *
FROM TABLE
WHERE id = some id;
ROW_D CUR_D%ROWTYPE;
BEGIN
OPEN CUR_D;
FETCH CUR_D INTO ROW_D;
CLOSE CUR_D;
ROW_D.column := 'some data';
INSERT INTO some table
VALUES ROW_D;
END;
/
您可以使用临时表
CREATE TEMPORARY TABLE temp_table AS (SELECT * FROM MyTable WHERE ...);
UPDATE temp_table SET column='Value' WHERE ...;
ALTER TABLE temp_table DROP column_name;
INSERT INTO MyDestinationTable SELECT * FROM temp_table;
对于SQL Server,语法为:
insert into TargetTable
(col1, col2, col3, ...)
select getdate(), col2, col3, ...
from SourceTable
SQL Server可以为您生成列列表。右键单击表名,然后选择Script as -> Select -> To New Window
。
创建一个包含所需列数的VIEW。
假设Tbl1有4列。创建包含所需列的视图。 Col1已被排除在外。
CREATE VIEW V1 AS
SELECT col2, col3, col4
FROM TBL1
使用VIEW进行插入。 TBL2的Col1值将是当前日期,对于其他列,值将来自TBL1的视图V1,即col2,col3,col4
INSERT INTO TBL2
SELECT GETDATE(), *
FROM V1
这样,您不需要每次都指定所有列。
希望能帮助到你
假设您的select具有在插入之前将结果集wrt唯一定义到目标表的内容的属性,您可以应用以下两个步骤:
Insert into target_table
select *
from source_table
where yada yada yada
and characteristic_yada
;
update target_table
set col1 = current date
where characteristic_yada
;
commit;
确保在所示的同一事务中发出两个命令。另外请注意characteristic_yada
必须适用于源表和目标表,并且在每次应用语句之前需要检查characteristic_yada
的适用性,除非它们引用了taregt表的pks / aks