3

首先,让我先说我知道类似问题的 INSERT/SELECT 解决方案(请参阅此处),但它不适用于我的场景。

我正在寻找一种不需要明确列出所有列的解决方案,因为这些列是提前未知的。此查询将在数十个独立数据库中的同一张表上运行。所有数据库都有一个公共列的子集,但每个都有自己独特的列,特定于该数据库。

那么,有没有办法复制整行,更改一些已知/恒定的列子集,然后在不明确列出所有列的情况下重新插入它?唯一的解决方案是使用从模式中收集的 DDL 信息动态构建查询吗?

4

2 回答 2

1

注意:此答案适用于 SQL Server。在此答案之后将

根据良好设计的原则,我将假设您的表有一个IDENTITY也是主键的列。我们还假设它没有计算列(或时间戳或任何需要更多操作的类型)。最后让我们假设您至少知道这个 ID 列的名称,这是标准的,例如“ id”。

您可以使用以下顺序:

SELECT * INTO #tmp FROM tbl WHERE id = @copyfrom;
ALTER TABLE #tmp DROP COLUMN id;
UPDATE #tmp SET
   column1 = ...,
   column2 = ...,
   column3 = ...;  --- the subset of columns you want to change
INSERT tbl SELECT * FROM #tmp;

SQL 小提琴演示

于 2013-04-17T14:10:22.807 回答
1

create table as我认为您可以通过(或select into)和更新的组合来做您想做的事情。

因此,创建表的副本:

create table newTable as
    select *
    from oldTable

或者,取决于您的数据库:

select *
into newTable
from oldTable

然后使用 update 进行更改:

update newTable
    set col2 = col1,
        code = (case when code = 'bad' then good else code end)
于 2013-04-17T14:10:40.770 回答