Sql server T-SQL仅使用变量而不是一列中的值将行的副本从一个表插入到另一个表

Sql server T-SQL仅使用变量而不是一列中的值将行的副本从一个表插入到另一个表,sql-server,database,tsql,datatable,rows,Sql Server,Database,Tsql,Datatable,Rows,我见过这样的事情 INSERT INTO TableNew SELECT * FROM TableOld WHERE [Conditions] 将数据/行从一个表复制到另一个表。但对我来说。。假设TableOld有列 A B C D E F G H I J K L M N 我只想复制列 C D E F G H I J K L M N 把旧桌子换成新桌子。两个表的列数相同,但TableNew的前两个是我需要在插入之前为其生成的Id值。因此,我需要在TableN

我见过这样的事情

INSERT INTO TableNew
    SELECT *  
    FROM TableOld
    WHERE [Conditions]
将数据/行从一个表复制到另一个表。但对我来说。。假设TableOld有列

A B C D E F G H I J K L M N 
我只想复制列

C D E F G H I J K L M N 
把旧桌子换成新桌子。两个表的列数相同,但TableNew的前两个是我需要在插入之前为其生成的Id值。因此,我需要在TableNew中插入一个新行,其中前两列的数据来自变量,其余的是TableOld中某一行的一些列的副本,对于TableOld中尚未有行的每一行,比如TableNew.C=TableOld.C和TableNew.D=TableOld.D


我想做一个游标,只需遍历TableOld的每一行,插入并检查已经存在的匹配(C&D)行,但是想知道是否有更好的方法来实现这一点更像上面所述。

通常公认的最佳实践是始终明确指定列的列表-在
INSERT
语句中,以及在
SELECT
上使用列的明确列表,而不是
*

INSERT INTO TableNew (C, D, E, F, G, H, I, J, K, L, M, N)
    SELECT C, D, E, F, G, H, I, J, K, L, M, N
    FROM TableOld
    WHERE [Conditions]

根本不需要凌乱的RBAR(一行一行)光标

通常公认的最佳做法是始终明确指定列列表-在
INSERT
语句中,以及在
SELECT
中使用列的明确列表,而不是
*

INSERT INTO TableNew (C, D, E, F, G, H, I, J, K, L, M, N)
    SELECT C, D, E, F, G, H, I, J, K, L, M, N
    FROM TableOld
    WHERE [Conditions]

根本不需要凌乱的RBAR(一行一行)光标

您需要生成什么类型的“Id”值?
identity
列将自行处理,只需将其从列列表中忽略即可。可能是默认值为的GUID?同样的交易。否则,在两侧指定列列表,即,
insert into TargetTable(Foo、Bar、Elvis,…)选择Elvis。。。从SourceTable,其中。您需要生成什么类型的“Id”值?
identity
列将自行处理,只需将其从列列表中忽略即可。可能是默认值为的GUID?同样的交易。否则,在两侧指定列列表,即,
insert into TargetTable(Foo、Bar、Elvis,…)选择Elvis。。。从SourceTable,其中。是的,但是我如何包括TableNew的A和B列的值,这些列是新的,需要在插入之前创建。这是我的主要问题,我试图找到更好的解决方案。你说的插入前需要做什么是什么意思??一点也不清楚。。。。。但是您当然可以将列A和B添加到
INSERT
列列表中的列列表中,然后在
SELECT
语句中为这两列提供固定值作为SQL变量……是的,但是我如何包括TableNew的A和B列的值,这些列是新的,并且需要在插入之前创建。这是我的主要问题,我试图找到更好的解决方案。你说的插入前需要做什么是什么意思??一点也不清楚。。。。。但是您当然可以将列A和B添加到
INSERT
列列表中的列列表中,然后在
SELECT
语句中为这两列提供固定值作为SQL变量。。。