Chen Jian

DBMS不区分字符串的大小写

如果在一个unqiue的字段上先后插入 "pig" 和 "PIG",会报错 如果一个非unique字段col上有两个值分别为“pig”和"PIG",那么select * from animal where col = ‘pig’会把这两个值都返回

查询sql server中所有的外键信息

从左到右分别是: 外键约束名,子表名,外键列名,父表名 select fk.name fkname , ftable.name ftablename, cn.name fkcol, rtable.name ftablename from sysforeignkeys   join sysobjects fk     on sysforeignkeys.constid = fk.id   join sysobjects ftable     on sysforeignkeys.fkeyid = ftable.id   join sysobjects rtable     on sysforeignkeys.rkeyid = rtable.id   join syscolumns cn     on sysforeignkeys.fkeyid = cn.id and sysforeignkeys.fkey = cn.colid

树型表结构的查询优化

    一个对象在业务逻辑上是一棵树,那它在数据库里就是由若干个表通过外键关联组成的树。 如何从数据库中取出这棵树?     比较优雅的做法是采用先序遍历的办法:先从树根表读出树根,在JAVA世界变成树根Bean,然后用同样的办法读出它的子树,再把子树BEAN设置为树根的属性。   这种做法优雅是优雅,但是速度慢,因为查一次,就要跟数据库服务器连一次,就要增加一次数据库IO。这是不行的。即使用了数据库连接池,开销还是很大    为了减少网络开销,应该先将数据从数据库中一次性取出,然后拿到JAVA世界中进行拆解。这样速度可以明显改善,代价是编程麻烦。 在数据库端要写一个存储过程,先读出树根记录到一个临时表,然后再将子树表逐个与该临时表连接,查出子树记录放入子树临时表,然后再将“孙”树表。。。,最后返回各个临时表的记录集。  在JAVA程序这边,还要用原始的JDBC语句一步一步地处理这种多重结果集,然后又一个一个地拆解

sql sever 2005 中复制多个、带自增主键、相互关联的表

利用导出向导可以导出此类数据,要注意的是,在导出时要选择“为多个表优化”,否则会出现主健不能写入数据的问题;“在事务中运行”最好也选上,如果发生异常,可以全部回滚 不过,利用导出向导导出数据时,要保证目标表都不存在或者都是空表,否则主外健的对应会与源表不一样。 举个例子,假设son表参考了father表,在源数据库里,假设son表中的第1条记录参考了father表的第1条记录(设主健值为1);复制数据时如果目标数据库中的father表中已有1000条数据(设主健值为1至1000),则源father表中的第1条记录拷到目标father表,第1条记录的主健值就变成了1001,而源son表复制到目标son表后,第1条记录参考的仍是father表中的主键1的记录! =================================================== 如果源表的最小的主健值为1000,而目标表不存在,拷贝后,目标表的主健值也是从1000开始 ================================================== 如果目标表不存在,则建成的目标表没有任何主外健约束 ================================================== 如果源表的主键是1,3,5,拷到已存在且刚建好的目标表后,主键会变成1,2,3