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

原贴: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 行受影响)

*/

 

你可能感兴趣的:(列名(栏位)引用其它表的内容替换查询、批量替换列名(栏位)应用实例)