列名(栏位)引用其它表的内容替换查询、批量替换列名(栏位)应用实例

本文介绍了一种使用T-SQL动态生成并执行SQL语句的方法来根据一张表(B表)的内容来修改另一张表(A表)的字段名称。通过构建动态SQL语句实现了根据指定表的数据更改现有表的列名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原贴:http://topic.youkuaiyun.com/u/20100412/20/15c04146-10b5-4dad-87c9-3678583dcd81.html?seed=1030697904

 

IF OBJECT_ID('TEC') IS NOT NULL

    DROP TABLE TEC

GO

CREATE TABLE TEC(COL NVARCHAR(5),CNAME NVARCHAR(2))

INSERT INTO TEC

 SELECT 'IMA01','名字' UNION ALL

 SELECT 'IMA02','細節'

GO

-- TEST DATA: TE

IF OBJECT_ID('TE') IS NOT NULL

    DROP TABLE TE

GO

CREATE TABLE TE(IMA01 NVARCHAR(1),IMA02 NVARCHAR(7))

INSERT INTO TE

 SELECT 'A','DETAILA' UNION ALL

 SELECT 'B','DETAILB'

GO

--START

--B表的内容作为A表的字段名实例:

DECLARE @SQL VARCHAR(8000)

SELECT @SQL=ISNULL(@SQL+',','')+COL+' AS '+CNAME FROM TEC

EXEC ('SELECT '+@SQL+' FROM TE')

 

 

--根据B表的内容批量更改A表字段名实例:

DECLARE @S VARCHAR(1000)

SELECT @S=ISNULL(@S+';EXEC SP_RENAME ','EXEC SP_RENAME ')

         +QUOTENAME(OBJECT_NAME(A.ID)+'.'+A.NAME,CHAR(39))

         +','+QUOTENAME(B.CNAME,CHAR(39)) + ',''COLUMN'''

FROM SYSCOLUMNS A JOIN TEC B ON A.ID = OBJECT_ID('TE') AND A.NAME=B.COL

EXEC (@S)

 

SELECT * FROM TE

/*

注意: 更改对象名的任一部分都可能会破坏脚本和存储过程。

注意: 更改对象名的任一部分都可能会破坏脚本和存储过程。

名字  細節

---- -------

A    DETAILA

B    DETAILB

 

(2 行受影响)

*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值