SQL 语句查询你爸爸的爸爸是谁?

最近遇到一个问题,有一张表是这样的数据结构,存着你家家谱,所以是自关联的表。加入你要查询你爸爸的爸爸那条记录,改怎么查询? 或者需要看祖宗十八代如何展示?

递归是一个很好的解决方法。递归代码如下

WITH RECURSIVE 
qry AS (SELECT * FROM Family WHERE nickname ='You'  UNION ALL SELECT bb.* FROM Family bb INNER JOIN qry on bb.id == qry.parent)
SELECT * FROM qry LIMIT 3, 1;

其中offset 3 是要查询的代数 1 就是你父亲,2 就是你爷爷。。。。

输出:

id  nickname parent
0   YYDBB     0

解决Visual Studio 2012 和SqlServer2008不兼容方法。。(报远程过程调用失败)

今天在装完VS2012 发现SqlServver2008不能用了  ,登录失败。

输入用户名密码,出现以下提示,无法连接数据库。(见图1)

 

图1

查看SQL Server配置管理工具,SQL Server服务中提示“远程过程调用失败”。(见图2)

 

图2

【解决办法】

首先,核查用户名密码是否正确。

其次,查看sql server 配置管理器中,第一项sql server服务能否远程过程连接。如果不能那是因为VS2012与sql server 2008不兼容情况,需要删除VS2012 express LocalDB即可。(见图3)

 

(见图3)

再次,将sql server 配置管理器=》sql server网络配置=》MSSQLSERVER协议=>VIA禁用。(见图4)

 

(见图4)

最后,重新启动“sql server服务”就可以连接上本地或远程服务器!(见图5)

(见图5)

重新使用用户名与密码登录即可连接数据库。

一次性执行多条语句

项目中有很多小问题需要解决。一个是获取自动增长的数据。今天又解决了一个小问题。

就是在sql语句中若同时执行多条语句。我们是这样写的

insert into  table1(name) values ('name');insert into table2(ID,group) values()

可是在作为一条语句执行时报错

check the manual that corresponds to your MySQL server version for the right….

解决办法如下

1、在MySQL的连接字符串中设置allowMultiQueries=true。
2、在程序中对SQL语句以分号拆分成多条SQL语句,然后使用Statement的addBatch方法,最后executeBatch就行。

希望给搜到这个问题的童鞋帮助

sql,mysql插入数据时获取自动增长列的ID

1、Mysql

在MySQL中,使用auto_increment类型的id字段作为表的主键。通常的做法,是通过“select max(id) from tablename”的做法,但是显然这种做法需要考虑并发的情况,需要在事务中对主表加以“X锁“,待获得max(id)的值以后,再解锁。这种做法需 要的步骤比较多,有些麻烦,而且并发性也不好。有没有更简单的做法呢?答案之一是通过select LAST_INSERT_ID()这个操作。乍一看,它和select max(id)很象,但实际上它是线程安全的。也就是说它是具体于数据库连接的。下面通过实验说明:

(1)、在连接1中向A表插入一条记录,A表包含一个auto_increment类型的字段。

(2)、在连接2中向A表再插入一条记录。

(3)、结果:在连接1中执行select LAST_INSERT_ID()得到的结果和连接2中执行select LAST_INSERT_ID()的结果是不同的;而在两个连接中执行select max(id)的结果是相同的。
其实在MSSQL中SCOPE_IDENTITY()和IDENT_CURRENT()的区别和这里是类似的。使用SCOPE_IDENTITY()可以 获得插入某个IDENTITY字段的当前会话的值,而使用IDENT_CURRENT()会获得在某个IDENTITY字段上插入的最大值,而不区分不同 的会话。

注:使用select last_insert_id()时要注意,当一次插入多条记录时,只是获得第一次插入的id值,务必注意!可以试试

2、sql
insert into book( Name,ISBN,Info)values(“sdaf”,”12345321236″,”asfadsfasfasdf”):select @@IDENTITY;