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

原贴:http://topic.csdn.net/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 行受影响)

*/

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值