在sql server中将数据从t1表交换到t2表,并将t2表交换到t1表
输出:-在sql server中将数据从t1表交换到t2表,并将t2表交换到t1表,sql,sql-server,tsql,Sql,Sql Server,Tsql,输出:- T1 T2 id name id name 1 a 1 e 2 b 2 f 3 c 3 g 4 d 4 h 将t1复制到临时表 T1 T2 id name id name 1 a 1 e 2 b 2 f 3
T1 T2
id name id name
1 a 1 e
2 b 2 f
3 c 3 g
4 d 4 h
T1 T2
id name id name
1 a 1 e
2 b 2 f
3 c 3 g
4 d 4 h
T1 T2
id name id name
1 e 1 a
2 f 2 b
3 g 3 c
4 h 4 d
T1 T2
id name id name
1 a 1 e
2 b 2 f
3 c 3 g
4 d 4 h
SELECT * INTO #swap FROM t1;
T1 T2
id name id name
1 a 1 e
2 b 2 f
3 c 3 g
4 d 4 h
DELETE FROM t1;
T1 T2
id name id name
1 a 1 e
2 b 2 f
3 c 3 g
4 d 4 h
INSERT INTO t1 SELECT * FROM t2;
T1 T2
id name id name
1 a 1 e
2 b 2 f
3 c 3 g
4 d 4 h
DELETE FROM t2;
T1 T2
id name id name
1 a 1 e
2 b 2 f
3 c 3 g
4 d 4 h
INSERT INTO t2 SELECT * FROM #swap;
不要将值从T1交换到T2,因为如果记录很大,则交换数据将花费更多时间,只需按如下方式重命名表即可
T1 T2
id name id name
1 a 1 e
2 b 2 f
3 c 3 g
4 d 4 h
BEGIN TRY
BEGIN TRANSACTION;
SELECT * INTO #swap FROM t1;
DELETE FROM t1;
INSERT INTO t1 SELECT * FROM t2;
DELETE FROM t2;
INSERT INTO t2 SELECT * FROM #swap;
COMMIT TRANSACTION;
PRINT 'Success';
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
PRINT 'Fail';
END CATCH
您可以在上找到有关此过程的文档
T1 T2
id name id name
1 a 1 e
2 b 2 f
3 c 3 g
4 d 4 h
如果需要包含架构名称,则只能将其包含在第一个参数中(也就是说,这不能用于将表从一个架构移动到另一个架构)。例如,这是有效的:
T1 T2
id name id name
1 a 1 e
2 b 2 f
3 c 3 g
4 d 4 h
EXEC sp_rename 'T1', 'T1_10'
EXEC sp_rename 'T2', 'T1'
EXEC sp_rename 'T1_10', 'T2'
更新:
T1 T2
id name id name
1 a 1 e
2 b 2 f
3 c 3 g
4 d 4 h
作为OP表结构,这里的Id也需要重命名
T1 T2
id name id name
1 a 1 e
2 b 2 f
3 c 3 g
4 d 4 h
EXEC sp_rename 'myschema.T1', 'T1_10'
多亏了@for pointing,您还可以通过执行
内部连接
来实现上述功能:
T1 T2
id name id name
1 a 1 e
2 b 2 f
3 c 3 g
4 d 4 h
sp_rename [PK_tblKeyTEST] ,[PK_tblKey]
结果:
T1 T2
id name id name
1 a 1 e
2 b 2 f
3 c 3 g
4 d 4 h
select t2.* from t1
inner join t2 on t2.id = t1.id ----- T1
select t1.* from t1
inner join t2 on t2.id = t1.id ----- T2
重命名表怎么样?你真的希望得到答案吗?这甚至不是一个恰当的问题……也许你可以分享一下为什么互换是必要的,以及问一个恰当的问题?公平地说,如果没有令人信服的理由永久交换任何内容,那么您可以简单地更改查询以从T1而不是T2提取数据,反之亦然。如果可以只重命名一个表,则似乎过于繁重了。@matbaile True。就我个人而言,我不太热衷于重命名表格。。。这并不总是重要的,但所有关联的名称保持不变(索引名称、约束名称等),并且不会重命名它们。在某些情况下可能会很尴尬。工作正常,但请注意,任何依赖名称(约束、索引、PK名称等)都不会被重命名。如果表名是用这些依赖名称编码的,可能会造成一些尴尬。