新足迹

 找回密码
 注册

精华好帖回顾

· 我的家在Central Coast (2012-12-13) overbridge · 【三刀厨侠争霸赛】 中印合璧 (2008-10-12) 着我青衣永飘零
· Notes to the Bible 之东施效娉篇 (2005-4-15) ThePlaceToBe · 我的海运经验分享 (2007-3-6) suel
Advertisement
Advertisement
查看: 1955|回复: 15

SQL各位大大进,中文column name的问题 [复制链接]

参与宝库编辑功臣

发表于 2011-2-16 11:40 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
RT, 如何在sto proc里返回的table column name是中文?
Advertisement
Advertisement

发表于 2011-2-16 11:45 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整

评分

参与人数 1积分 +2 收起 理由
bffbffbff + 2

查看全部评分

退役斑竹

发表于 2011-2-16 11:46 |显示全部楼层
此文章由 月亮 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 月亮 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你是说本身这个column name就是中文,你想返回这个中文名?

参与宝库编辑功臣

发表于 2011-2-16 11:46 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 乱码 于 2011-2-16 12:45 发表
use alias,

http://www.w3schools.com/sql/sql_alias.asp


我问的就是alias如何可以显示中文, 结果不好用
永远的junior programmer

参与宝库编辑功臣

发表于 2011-2-16 11:47 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 月亮 于 2011-2-16 12:46 发表
你是说本身这个column name就是中文,你想返回这个中文名?


col英文,但alias多语言支持,包括unicode的中文和阿拉伯文
永远的junior programmer

发表于 2011-2-16 11:48 |显示全部楼层
此文章由 混不到坑的萝卜 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 混不到坑的萝卜 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这听起来像是设计的错误。为什么要返回中文column name?你尽可以在程序里对返回的column name进行localization的。

你需要修改你的设计。

评分

参与人数 1积分 +2 收起 理由
bffbffbff + 2

查看全部评分

Advertisement
Advertisement

退役斑竹

发表于 2011-2-16 11:49 |显示全部楼层
此文章由 月亮 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 月亮 所有!转贴必须注明作者、出处和本声明,并保持内容完整
用[ ]匡起来了吗?

评分

参与人数 1积分 +3 收起 理由
bffbffbff + 3

查看全部评分

参与宝库编辑功臣

发表于 2011-2-16 11:49 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这个从整个系统角度可以实现,把英文alias送到web application, 那边拿到英文的alias找langugae conversion table 去lookup。

这里问问各位不许要借助前段光在database layer 如何实现?
永远的junior programmer

参与宝库编辑功臣

发表于 2011-2-16 11:50 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 混不到坑的萝卜 于 2011-2-16 12:48 发表
这听起来像是设计的错误。为什么要返回中文column name?你尽可以在程序里对返回的column name进行localization的。

你需要修改你的设计。


程序里面是localisation的,我现在的问题是database layer only, 不看web application
永远的junior programmer

参与宝库编辑功臣

发表于 2011-2-16 12:07 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
搞定了,还是最基本的错误nvarchar,在生成dynamic script的时候有个不显眼variable写成varchar了,   谢谢各位

参与宝库编辑功臣

发表于 2011-2-16 12:17 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
还一个问题,如果不是dynamic query的话,在sto proc或者udf里出现中文(下面的例子)的话会报错, 原因是我们有个database level 的trigger ,里面的type也得改
Advertisement
Advertisement

参与宝库编辑功臣

发表于 2011-2-16 12:19 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 混不到坑的萝卜 于 2011-2-16 12:48 发表
这听起来像是设计的错误。为什么要返回中文column name?你尽可以在程序里对返回的column name进行localization的。

你需要修改你的设计。


我们的设计是一般的东西都是localisation, 但有些dynamic的,在runtime生成的东西就需要直接把结果弄对, 谢谢回复
永远的junior programmer

发表于 2011-2-16 13:28 |显示全部楼层
此文章由 混不到坑的萝卜 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 混不到坑的萝卜 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 bffbffbff 于 2011-2-16 12:19 发表
我们的设计是一般的东西都是localisation, 但有些dynamic的,在runtime生成的东西就需要直接把结果弄对, 谢谢回复

再dynamic你返回的column name都是有一定范围的。我觉得你们这个用中文作为Alias的思路从根本上就不对,不是正确的globalization的设计思路。

你可以凑合,但不好的设计会让你在今后的维护上吃大亏的。

评分

参与人数 1积分 +2 收起 理由
bffbffbff + 2 谢谢奉献

查看全部评分

参与宝库编辑功臣

发表于 2011-2-16 14:58 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 混不到坑的萝卜 于 2011-2-16 14:28 发表

再dynamic你返回的column name都是有一定范围的。我觉得你们这个用中文作为Alias的思路从根本上就不对,不是正确的globalization的设计思路。

你可以凑合,但不好的设计会让你在今后的维护上吃大亏的。


dynamic query不是因为翻译语言,是因为那是生成generic report generator, 要求一切包括column , operator, sorting, display在内都是dynamic的。
中文做alias不是个思路只是个例子,目的是用户可以随意定义alias不论他们是用什么语言。刚才我问的问题原因如上面所说,在由英语向多语言转的时候有个变量还是varchar,我刚才马虎了没查到。

你说的对,我们localization早在web层面实现了,我们有专门做ui的人做,我只做数据库层面。
我们整个系统的business logic是在数据库层面,很多动态界面和数据的生成都是在后台,对于这些generic的东西,前台只是presentation, 很多信息是runtime生成,login的session是和language_id相联的。
这个系统设计都5-6年了,我还没毕业的时候就有了,也不是我说改就可以改的
永远的junior programmer

发表于 2011-2-27 21:41 |显示全部楼层
此文章由 Denzel 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Denzel 所有!转贴必须注明作者、出处和本声明,并保持内容完整
如果只是返回列明以中文名称可以使用alias:

create proc spTest
as
begin
  select 1 as N'结果'
end;

如果proc种有很复杂的业务逻辑并且列的名字是动态改变的:
1)可以从UI使用.net的resource文件-当然需要整体设计一下,可支持多国语言
2)如果直接把显示的逻辑封在proc种,我认为比较好的方法是在数据库定义一个英文列明和中文的对应表,业务程序在返回结果前把数据dump到临时表后可以使用:
  A:动态sql - 比较笨,但是管用
  B:loop though column def mapping table, 动态修改修改英文列名为中文,然后select结果

Cheers.

评分

参与人数 1积分 +3 收起 理由
bffbffbff + 3 谢谢奉献

查看全部评分

参与宝库编辑功臣

发表于 2011-2-28 12:33 |显示全部楼层
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 Denzel 于 2011-2-27 22:41 发表
如果只是返回列明以中文名称可以使用alias:

create proc spTest
as
begin
  select 1 as N'结果'
end;

如果proc种有很复杂的业务逻辑并且列的名字是动态改变的:
1)可以从UI使用.net的resource文件-当然需要整体设计 ...



多谢,我们也是用lookup表来翻译的
我用dynamic query的目的是做report generic writer, 用户可以自定义添加删除column,用任何语言定义alias。
永远的junior programmer
Advertisement
Advertisement

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部