SQL SERVER 中:
select @@IDENTITY返回的id出错,用select SCOPE_IDENTITY()代替
用代码生成器生成的代码中,一条插入语句后面一般都跟上;select @@IDENTITY这么一个全局变量,主要是为了将插入记录的id返还回来,返回的id平时都没怎么用到过,今天用的时候,突然发现返回的不是插入的id,上网查了一下,发现表中涉及到有触发器的时候,;select @@IDENTITY就不起作用了,这个时候可以用select SCOPE_IDENTITY()来代替就可以了。
oracle下
我已经创建了: CREATE SEQUENCE sq_userInboxId MINVALUE 1 MAXVALUE 10000000 START WITH 1 INCREMENT BY 1 NOCACHE
Oracle中没有identity,
只有序列,即sequence,
select sq_userInboxId .nextval from dual;
查出后将结果放入变量a,
然后
INSERT INTO T_CUST(sq_userInboxId, CUST_NAME) VALUES(a, 'hahaha');
这样才行,这是oracle的通常写法
MySql环境
获取最新创建的 主键值.
不可使用 select @@identity
这个 select @@identity, 是 SQL Server 数据库用的。
mysql 是使用另外一个函数, 下面是例子:
mysql>
CREATE
TABLE
test_create_tab2 (
-> id
INT
AUTO_INCREMENT,
-> val
VARCHAR
(10),
->
PRIMARY
KEY
(id)
-> );
Query OK, 0
rows
affected (0.09 sec)
mysql>
INSERT
INTO
test_create_tab2(val)
VALUES
(
'NO id'
);
Query OK, 1 row affected (0.03 sec)
mysql>
select
last_insert_id()
as
id;
+
----+
| id |
+
----+
| 1 |
+
----+
1 row
in
set
(0.00 sec)
mysql>
INSERT
INTO
test_create_tab2(val)
VALUES
(
'NO id 2'
);
Query OK, 1 row affected (0.03 sec)
mysql>
select
last_insert_id()
as
id;
+
----+
| id |
+
----+
| 2 |
+
----+
1 row
in
set
(0.00 sec)
mysql>
select
*
from
test_create_tab2;
+
----+---------+
| id | val |
+
----+---------+
| 1 |
NO
id |
| 2 |
NO
id 2 |
+
----+---------+
2
rows
in
set
(0.00 sec)