中英欄位對照表替換英文欄位表

s_111111 2010-04-12 08:11:01
簡單來說
英文欄位表TE:
IMA01 IMA02
A DETAILA
B DETAILB

中英欄位對照表TEC:
COL CNAME
IMA01 名字
IMA02 細節

最后要的是中文欄位表TC:
名字 細節
A DETAILA
B DETAILB

用兩種方法吧。
一:用查詢方式
二:把英文欄位表TE欄位名變成中文欄位名

備註:
1.每個問題50分。
2.越簡潔越好,最好一句SQL可以解決。
3.先答者優先。
...全文
105 点赞 收藏 13
写回复
13 条回复
htl258_Tony 2010年04月12日
[Quote=引用 12 楼 s_111111 的回复:]
第二問題已經OK,得分情況如下:
Tony 39——40分不好聽
无枪狙击手 10——思路一樣
爱新觉罗.毓华 1——參與獎

得分截止到此樓,明天結貼。
總結:
基本上就是要用動態SQL語句就對了。。。
[/Quote]楼主考虑周全,每个发贴的都像楼主这样该多好啊。
回复 点赞
s_111111 2010年04月12日
第二問題已經OK,得分情況如下:
Tony 39——40分不好聽
无枪狙击手 10——思路一樣
爱新觉罗.毓华 1——參與獎

得分截止到此樓,明天結貼。
總結:
基本上就是要用動態SQL語句就對了。。。
回复 点赞
s_111111 2010年04月12日
[Quote=引用 9 楼 dawugui 的回复:]
引用 8 楼 s_111111 的回复:
第一問題已經OK,得分情況如下:
无枪狙击手 30——最快
百年树人 15——接近
77C#+SQL 5——辛苦了

才50吗?最后50分给我.
[/Quote]
還有50分是第二題的
回复 点赞
htl258_Tony 2010年04月12日
[Quote=引用 8 楼 s_111111 的回复:]
第一問題已經OK,得分情況如下:
无枪狙击手 30——最快
百年树人 15——接近
77C#+SQL 5——辛苦了
[/Quote]我的第二个问题指望你了。
回复 点赞
dawugui 2010年04月12日
[Quote=引用 8 楼 s_111111 的回复:]
第一問題已經OK,得分情況如下:
无枪狙击手 30——最快
百年树人 15——接近
77C#+SQL 5——辛苦了
[/Quote]
才50吗?最后50分给我.
回复 点赞
s_111111 2010年04月12日
第一問題已經OK,得分情況如下:
无枪狙击手 30——最快
百年树人 15——接近
77C#+SQL 5——辛苦了
回复 点赞
htl258_Tony 2010年04月12日
[Quote=引用 6 楼 s_111111 的回复:]
引用 3 楼 happyflystone 的回复:
SQL code
------------------------------------
-- Author: flystone
-- Version:V1.001
-- Date:2010-04-12 20:18:21
------------------------------------
-- Test Data: TEC
……
[/Quote]

If object_id('TEC') is not null
Drop table TEC
Go
Create table TEC(COL nvarchar(5),CNAME nvarchar(2))
Go
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))
Go
Insert into TE
select 'A','DETAILA' union all
select 'B','DETAILB'
Go
--Start
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 行受影响)
*/
回复 点赞
s_111111 2010年04月12日
[Quote=引用 3 楼 happyflystone 的回复:]
SQL code
------------------------------------
-- Author: flystone
-- Version:V1.001
-- Date:2010-04-12 20:18:21
------------------------------------
-- Test Data: TEC
If object_id('TEC') is……
[/Quote]
第二個問題有沒有其他方法。
因為表可能還有其他關聯問題。
我要的是能不能不刪除原表,直接替換TE表的欄位名。
回复 点赞
SQL77 2010年04月12日
----------------------------------------------------------------
-- Author :SQL77(只为思齐老)
-- Date :2010-04-12 20:21:49
-- Version:
-- Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)
-- Oct 14 2005 00:33:37
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:#TE
if object_id('tempdb.dbo.#TE') is not null drop table #TE
go
create table #TE([IMA01] varchar(1),[IMA02] varchar(7))
insert #TE
select 'A','DETAILA' union all
select 'B','DETAILB'
--> 测试数据:#TEC
if object_id('tempdb.dbo.#TEC') is not null drop table #TEC
go
create table #TEC([COL] varchar(5),[CNAME] varchar(4))
insert #TEC
select 'IMA01','名字' union all
select 'IMA02','細節'
--------------开始查询--------------------------

DECLARE @S VARCHAR(200)
select @S=ISNULL(@S+',','')+COL+' AS '+TE.CNAME
from #TEC TE,
(SELECT NAME,COLID FROM tempdb.dbo.SYSCOLUMNS WHERE ID=object_id('tempdb.dbo.#TE'))T
WHERE TE.COL=T.NAME ORDER BY COLID

EXEC('SELECT '+@S+' FROM #TE')

----------------结果----------------------------
/*


(2 行受影响)

(2 行受影响)
名字 細節
---- -------
A DETAILA
B DETAILB

(2 行受影响)


*/


申请字符长度太短了
回复 点赞
SQL77 2010年04月12日
----------------------------------------------------------------
-- Author :SQL77(只为思齐老)
-- Date :2010-04-12 20:21:49
-- Version:
-- Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)
-- Oct 14 2005 00:33:37
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:#TE
if object_id('tempdb.dbo.#TE') is not null drop table #TE
go
create table #TE([IMA01] varchar(1),[IMA02] varchar(7))
insert #TE
select 'A','DETAILA' union all
select 'B','DETAILB'
--> 测试数据:#TEC
if object_id('tempdb.dbo.#TEC') is not null drop table #TEC
go
create table #TEC([COL] varchar(5),[CNAME] varchar(4))
insert #TEC
select 'IMA01','名字' union all
select 'IMA02','細節'
--------------开始查询--------------------------

DECLARE @S VARCHAR(20)
select @S=ISNULL(@S+',','')+COL+' AS '+TE.CNAME
from #TEC TE,
(SELECT NAME,COLID FROM tempdb.dbo.SYSCOLUMNS WHERE ID=object_id('tempdb.dbo.#TE'))T
WHERE TE.COL=T.NAME ORDER BY T.COLID

EXEC('SELECT '+@S+' FROM #TE')

----------------结果----------------------------
/*

(2 行受影响)

(2 行受影响)
名字 IMA02
---- -------
A DETAILA
B DETAILB

(2 行受影响)


*/
回复 点赞
-狙击手- 2010年04月12日
------------------------------------
-- Author: flystone
-- Version:V1.001
-- Date:2010-04-12 20:18:21
------------------------------------
-- Test Data: TEC
If object_id('TEC') is not null
Drop table TEC
Go
Create table TEC(COL nvarchar(5),CNAME nvarchar(2))
Go
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))
Go
Insert into TE
select 'A','DETAILA' union all
select 'B','DETAILB'
Go
--Start
declare @s varchar(1000)

Select @s = isnull(@s+',','') +col+' as ['+cname+']' from syscolumns a,tec b where a.id = object_id('TE') and a.name = b.col
exec('select '+ @s + 'into tt from te;drop table te ;exec sp_rename ''tt'',''te'';')


select * from te


--Result:
/*名字 細節
---- -------
A DETAILA
B DETAILB


*/
--End
回复 点赞
百年树人 2010年04月12日
---测试数据---
if object_id('[TE]') is not null drop table [TE]
go
create table [TE]([IMA01] varchar(1),[IMA02] varchar(7))
insert [TE]
select 'A','DETAILA' union all
select 'B','DETAILB'
GO
if object_id('[TEC]') is not null drop table [TEC]
go
create table [TEC]([COL] varchar(5),[CNAME] varchar(4))
insert [TEC]
select 'IMA01','名字' union all
select 'IMA02','細節'
GO

---查询---
DECLARE @SQL VARCHAR(8000)
SELECT
@SQL=ISNULL(@SQL+',','')
+COL+' AS '+CNAME
FROM TEC
--PRINT @SQL
EXEC ('SELECT '+@SQL+' FROM TE')

---结果---
名字 細節
---- -------
A DETAILA
B DETAILB

(2 行受影响)
回复 点赞
-狙击手- 2010年04月12日
------------------------------------
-- Author: flystone
-- Version:V1.001
-- Date:2010-04-12 20:18:21
------------------------------------
-- Test Data: TEC
If object_id('TEC') is not null
Drop table TEC
Go
Create table TEC(COL nvarchar(5),CNAME nvarchar(2))
Go
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))
Go
Insert into TE
select 'A','DETAILA' union all
select 'B','DETAILB'
Go
--Start
declare @s varchar(1000)

Select @s = isnull(@s+',','') + col+' as ['+cname+']' from syscolumns a,tec b where a.id = object_id('TE') and a.name = b.col
exec('select '+ @s + ' from te')

--Result:
/*名字 細節
---- -------
A DETAILA
B DETAILB


*/
--End
回复 点赞
发动态
发帖子
应用实例
创建于2007-09-28

1.1w+

社区成员

6.8w+

社区内容

MS-SQL Server 应用实例
社区公告
暂无公告