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