将两个表的列调整为一致

USE tempdb
GO
IF OBJECT_ID('a') IS NOT NULL DROP TABLE a
IF OBJECT_ID('b') IS NOT NULL DROP TABLE b
CREATE TABLE a(id INT,[name] NVARCHAR(MAX))
CREATE TABLE b(id INT,[name] NVARCHAR(MAX),age INT,n NVARCHAR(50) NOT NULL)

--将 a 的表结构与 b 的结构调整成一致
DECLARE @sql NVARCHAR(MAX)
SELECT @sql =(
SELECT 'ALTER TABLE a ADD '+c.name+' '+p.name
+CASE WHEN p.name IN ('varchar','char') THEN '('+CAST(c.max_length AS VARCHAR(20))+')'
	  WHEN p.name IN ('nvarchar','nchar') THEN '('+CAST(c.max_length/2 AS VARCHAR(20))+')'
	  ELSE '' END
+CASE WHEN c.is_nullable=1 THEN ' NULL' ELSE ' NOT NULL' END
+'; '
FROM sys.[columns] AS c 
INNER JOIN sys.types AS p ON c.[object_id]=OBJECT_ID('b') AND c.user_type_id=p.user_type_id
AND c.name NOT IN (
	SELECT c.name FROM sys.[columns] AS c WHERE c.[object_id]=OBJECT_ID('a')
)
FOR XML PATH('')
)
/*
PRINT @sql
ALTER TABLE a ADD age int NULL; ALTER TABLE a ADD n nvarchar(50) NOT NULL; 
*/

EXEC (@sql)
--看表结构可知 a,b 两表的结构已完全一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值