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