代码改变世界

用PowerDesign反向生成数据库Sql语句问题

2014-02-11 19:16  左眼微笑右眼泪  阅读(974)  评论(0编辑  收藏  举报

        在用Pd15反向生成数据库时,生成的Sql语句在Sql Server Manager Studio里面报错,根本就执行不了。数据库用的是Sql Server 2008 R2。经过一番修改,最后终于让这些Sql语句全部能执行成功了。原因可能是它生成的语法默认是MySQl数据库。这块没仔细研究,也有可能是在里面有个地方可以设置,但是我没找到地方。

主要错误语法如下:

1、 删除重复外键的语法错误

clip_image002

错误一:首先系统记录外键的表在Sql Server 2008R2中是sys.foreign_keys而不是它默认生成的sys.sysforeignkey,另外外键名字也不是role而是name;

(sql server 2008中的系统表具体参见:http://www.cnblogs.com/lzrabbit/archive/2011/06/06/2073507.html

错误二:Sql中没有if then的用户,只有case when then的用法。所以这块需要改成if begin end这样的用法;

错误三:删除外键不是delete foreign key而是drop constraint

2、 删除重复表的语法错误

clip_image004

错误一:系统记录所有表的系统表在Sql Server 2008R2中是sys.tables而不是它默认生成的sys.systable,另外表的名字也不是table_name而是name,而且也没有table_type这个属性;

错误二:Sql中没有if then的用户,只有case when then的用法。所以这块需要改成if begin end这样的用法;

3、 建外键的语法错误:

clip_image006

On update restrict表示在更新的时候使用这个约束,restrict: 只要本表格里面有指向主表的数据, 在主表里面就无法更新/删除相关记录,相当于no action。但这种想法是MySql的,在sql Server 里面要写成 no action

参考 http://msdn.microsoft.com/en-us/library/ms174123.aspx

ALTER TABLE table_name

ADD

< table_constraint > ::=

[ CONSTRAINT constraint_name ]

| FOREIGN KEY

( column [ ,...n ] )

REFERENCES ref_table [ (ref_column [ ,...n ] ) ]

[ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ]

[ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ]

参考网址:http://bbs.csdn.net/topics/310202211

 

PS:整理完了,就找到了设置的地方,刚才只顾闷头去找Sql语句错误的地方,没仔细去找,具体怎样设置,参见这篇文章:

http://www.cnblogs.com/xiaoxiangfeizi/p/3544935.html:就纯属当熟悉一下Sql Server的Sql语句的写法了。