在Access数据库中存在select @@identity吗?答案是肯定的。但是Access一次只能执行一条SQL,多条SQL需要多次执行,这是限制。在SQL Server中,可以一次执行多条SQL语句。Access使用的是Jet-SQL,SQL Server使用的是T-SQL,两者用法上相差很大。
但是Access中可以连续执行N条语句,象下面这样:
cmd.CommandText = "INSERT INTO MyTable (N1,N2) VALUES (22,11)";
int count = cmd.ExecuteNonQuery();
cmd.CommandText = "SELECT @@IDENTITY";
int newId = (int)cmd.ExecuteScalar();
其中SELECT @@IDENTITY是取出前一条语句的自动编号的关键字。
在Sql Server中可以用ExecuteReader()来同时执行几条一起的Sql语句
PetShop 4.0中有如下用法:
using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) {
// Read the returned @ERR
rdr.Read();
// If the error count is not zero throw an exception
if (rdr.GetInt32(1) != 0)
throw new ApplicationException("DATA INTEGRITY ERROR ON ORDER INSERT - ROLLBACK ISSUED");
}
其中cmd对象的Sql语句如下所示(我在调试中取出来的):
Declare @ID int;
Declare @ERR int;
INSERT INTO Orders VALUES
(@UserId, @Date, @ShipAddress1, @ShipAddress2, @ShipCity, @ShipState, @ShipZip, @ShipCountry, @BillAddress1, @BillAddress2, @BillCity, @BillState, @BillZip, @BillCountry, ‘UPS‘, @Total, @BillFirstName, @BillLastName, @ShipFirstName, @ShipLastName, @AuthorizationNumber, ‘US_en‘);
SELECT @[email protected]@IDENTITY;
INSERT INTO OrderStatus VALUES(@ID, @ID, GetDate(), ‘P‘);
SELECT @[email protected]@ERROR;
INSERT INTO LineItem VALUES( @ID, @LineNumber0, @ItemId0, @Quantity0, @Price0);
SELECT @[email protected][email protected]@ERROR;
INSERT INTO LineItem VALUES( @ID, @LineNumber1, @ItemId1, @Quantity1, @Price1);
SELECT @[email protected][email protected]@ERROR;
SELECT @ID, @ERR