无论如何, SELECT @@IDENTITY 直接查询系统变量, 一定会比 select top 1 id from table order by id desc 之类从表中查询数据的方法来得高效. 系统变量 @@IDENTITY 的意义也就在于在刚执行完插入语句后不用再次查询表而获得最后一次的自动标识.
access没办法 只有再次查询刚才的这个 select top 1 id from table order by id descorselect max(id) from xxxxx ----------------------------------------不好意思, 我是就事论事, 对事不对人.我看你上面的话, 意思好象是 "access没办法, SQL Server 2000 有办法, @@IDENTITY" (不知我有没有猜错你的意思?) 然后我经过试验, 得出的结论是, 在 @@IDENTITY 这点上, Access 不比 SQL Server 2000 差, 所以我才啰嗦了一大堆, 不好意思, 见笑了. :)如果我理解错了你的意思, 在这里向你道歉了.
Sql 2000 可以同时执行 1条以上的语句可以把 insert..... ; SELECT @@IDENTITY 放到一起作为 CommandText 也可以加上 Set Nocount on 和 Set Nocount off 这样就可以返回 一个int值 也可以使用存储过程 这样更好 Access也可以执行SELECT @@IDENTITY 但是需要再次查询一次
INSERT INTO MyTable VALUES (22, 11)
SELECT @@IDENTITY
";
select top 1 id from table order by id descorselect max(id) from xxxxx
Access 能够同时执行2条sql语句?
没有意义
{
static void Main()
{
string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=f:\tmp\P.mdb";
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = new OleDbConnection(strConn);
cmd.Connection.Open();
for (int i = 0; i < 3; i++)
{
cmd.CommandText = "INSERT INTO MyTable (N1,N2) VALUES (22,11)";
cmd.ExecuteNonQuery();
cmd.CommandText = "SELECT @@IDENTITY";
int n = (int)cmd.ExecuteScalar();
System.Console.WriteLine(n);
}
cmd.Connection.Close();
}
}/*
在 Access 数据库 P.mdb 中建一个表 MyTable,有3个字段:
id, 自动编号
N1, 长整型
N2, 长整型然后执行上述程序,第一次运行时输出:
1
2
3第二次再运行,输出:
4
5
6用 Access 查看 MyTable 表,发现增加了6行记录,证实了上述程序的作用.
*/
Access 能够同时执行2条sql语句?
------------------------------------可以同时执行N条语句,象下面这样就可以了:cmd.CommandText = "INSERT INTO MyTable (N1,N2) VALUES (22,11)";
cmd.ExecuteNonQuery();
cmd.CommandText = "SELECT @@IDENTITY";
int n = (int)cmd.ExecuteScalar();
System.Console.WriteLine(n);
可以使用SELECT @@IDENTITY那跟那个直接查询 select max(id)有什么区别?
可以使用 SELECT @@IDENTITY
那跟那个直接查询 select max(id)有什么区别?
--------------------------------------------无论如何,使用系统提供的 SELECT @@IDENTITY, 一定会比 SELECT MAX(id)高效, 因为系统肯定知道最后插入的一条记录的 IDENTITY, 比从一个表中去查找 MAX(id) 好得多(想象一下, 如果表中有几万条记录的情况).既然有 SELECT @@IDENTITY 可用, 为什么不用? 系统变量 @@IDENTITY 设计出来就是作这个用途的. 难道楼上的在 SQL Server 2000 数据库中也不使用 SELECT @@IDENTITY 而宁愿用 SELECT MAX(id) 吗? 难道 Access 中的系统变量 @@IDENTITY 就不如 SQL Server 2000 的同名变量吗?
那这句呢?
他说的的是Access当然你的也可以用
看个人喜好
Access 能够同时执行2条sql语句?你这个2条同时执行??
------------------------------------如果是 SQL Server 2000, 你在 C# 程序中使用 System.Data.SqlClient.SqlConnection, 不是也是按我这种方法在不关闭连接的情况下同时执行两条 SQL 查询, 以获得 @@IDENTITY 吗? 难道你还有更高明的方法在 C# 程序中获得 SQL Server 2000 的 @@IDENTITY 吗? 请指教.
select top 1 id from table order by id descorselect max(id) from xxxxx
----------------------------------------不好意思, 我是就事论事, 对事不对人.我看你上面的话, 意思好象是 "access没办法, SQL Server 2000 有办法, @@IDENTITY" (不知我有没有猜错你的意思?) 然后我经过试验, 得出的结论是, 在 @@IDENTITY 这点上, Access 不比 SQL Server 2000 差, 所以我才啰嗦了一大堆, 不好意思, 见笑了. :)如果我理解错了你的意思, 在这里向你道歉了.
放到一起作为 CommandText 也可以加上 Set Nocount on 和 Set Nocount off
这样就可以返回 一个int值
也可以使用存储过程 这样更好 Access也可以执行SELECT @@IDENTITY 但是需要再次查询一次
可以把 insert..... ; SELECT @@IDENTITY
放到一起作为 CommandText
---------------------------------------这点以前没想到, 学习了.
可以使用全局变量@@IDENTITY来解决问题.