假定数据库中有这么几张表,sql server 数据库
表名:student   字段: snum(学号 varchar(10))    sname(姓名 varchar(10))    sex(性别 varchar(2))
                              s1                           张三                          男
                              s2                           李四                          男
表名:course    字段: cnum(课程号varchar(10))   cname(课程名varchar(10))   
                          c1                           数据库
                              c2                           操作系统
表名:grade     字段: snum(学号varchar(10))     cnum(课程号varchar(10))    point(分数float)
                          s1                           c1                      100
                          s1                           c2                      100
                          s2                           c1                      100
                          s2                           c2                      100
---------------------------------------------------以上是主表
表名:student_chinese 
表名:course_chinese
表名:grade_chinese
---------------------------------------------------这三张表是副表,是主表的拷贝,表结构和数据一样
表名:student_english   字段: snum(学号 varchar(10))    sname(姓名 varchar(10))    sex(性别 varchar(2))
                                   s1                       ZhangSan                      Man
                                        s2                       LiSi                           Man
表名:course_english    字段: cnum(课程号varchar(10))   cname(课程名varchar(10))   
                                   c1                           DB
                                        c2                           OS
-----------------------------------------------以上是两张副表,也是主表的拷贝,表结构一样,数据是英文的
表名:mlangconf     字段: table_name(被翻译的表名,varchar(10))   column_name(被翻译的字段,varchar(10))
                                   student                                sname
                                   student                                sex
                                   course                                 cname
数据库中需要翻译的表以及表中哪些字段要翻译,都保存在此表中。
下面说一下需求:我需要一个存储过程,有一个输入参数,可以根据该参数判断显示中文还是英文,将翻译配置表中的各主表(mlangconf)中的需要翻译的字段数据更新为其对应语言副表的数据,更新失败时,该过程抛出异常,回滚事务,恢复到该过程执行前的数据。更新成功时,打印更新日志。create procedure set_lang
@lang varchar(50) default 'en'谢谢,使用sql server 数据库。

解决方案 »

  1.   

    我的理解是这样的.你这个操作实际上是更新一个表,如果传中文,就更新中文表,同时更新英文表.你可以不用建两个表,而设置一个BIT位来标记一下是中文还是英文,然后去更新.是不是你在做两个表更新时对翻译部分有些困惑?如果是,我一时也没想到更好的.只是抛砖引玉,希望你的问题能得到解决.
      

  2.   

    谢谢你,可能是我表达能力不行,
    我的目的是这样的,我在做系统国际化的工作,在这仅以英文和中文为例,当我选择英文时,要求从数据库中显示的数据也是英文的,这时就需要用对应的英文表(_english)中的数据来更新主表,当我需要显示中文时,就用对应的中文表(_chinese)中的数据来更新主表,实际读数据库操作的还是主表,就是最上面的那几张表;主表中存储的是中文还是英文 不确定,随时都会变。您可能会有这样的疑问:“干嘛不做两个数据库,一份是中文的,一份是英文的?”,因为数据库很大,那样做不太好,需要翻译的工作量很大,另外不管是对数据库进行 增、删、该、中的那种操作都要涉及到两个数据库。
        为了减轻工作量,我添加了一张表:翻译配置表(mlangconf),这张表中存储的是需要翻译的表和表中的字段,因为并不是数据库中所有的表都需要翻译,也不是表中所有的字段数据都需要翻译。这样做可以减轻一定的工作量,另外 (1)如果主表删除了一条记录,各副表可以删除,也可不做操作。
    (2)如果主表修改了一条记录:
            修改了主键值,对应各副表也要修改使修改的主键值保持一致;
            修改翻译字段的数据,请到对应的副表中改;
            修改非翻译字段的数据,需要在主表中改。
    这样后期对数据库进行维护时 只要修改部分表或字段就行了。我需要的存储过程的工作的就是,根据输入参数 判断从那个副表中取数据同时更新主表。
      

  3.   

    3楼的说得很对,其实你只要在表中再加一个标示字段就可,比如languagetype来标示存入数据库中的数据是中文的还是英文的