0

实际上我想到了这样的场景:
假设我们正在管理一个存储许多书籍的图书馆。
我们的图书馆网络应用程序允许用户将书籍添加到书架上。
该数据库有两个表,书籍和作者。架构是这样的:

CREATE TABLE Books
(book_id int NOT NULL IDENTITY(1,1),
book_name nvarchar(100) NOT NULL,
author_id int NOT NULL,
PRIMARY KEY (book_id),
FOREIGN KEY ( author_id ) REFERENCES Authors(author_id),)

CREATE TABLE Authors
(author_id int NOT NULL IDENTITY(1,1),
author_name nvarchar(100) NOT NULL,
PRIMARY KEY (author_id))

假设请求将获取作者姓名和书名以将书存储在书架上。
如果没有这样的作者,它将自动生成作者条目。但我希望这个操作成为一个事务。(如果出现问题,我希望一切都回滚。)
我可以在像这样结束事务之前获取主键吗?

$server_name = "s3";
$connection_info = array( "Database"=>"bis_testing", "UID"=>"bisuser", "PWD"=>"111");
$conn = sqlsrv_connect( $server_name, $connection_info);

sqlsrv_begin_transaction( $conn )

$sql = "INSERT INTO Author(author_name)
       values
       (?);";

$author_name = 'Dr. Pro';
$stmt1 = sqlsrv_query( $conn, $sql, array($brand_name));
**// get author primary key to $author_pk**

$sql = "INSERT INTO Book(book_name, author_id)
       values
       (?,?);";

$book_name = 'Writing that works';
$stmt2 = sqlsrv_query( $conn, $sql, array($book_name, $author_pk));

if ($stmt1 && $stmt2) {
    echo 'done';
}

如果没有,我应该如何做这项工作?

4

1 回答 1

0

我看不到像在 MySQL 中那样获取最后插入 id 的方法,但是您可以从 SQL Server 获取最后插入的 id,如下所述:获取插入行标识的最佳方法?

您还可以查看一个存储过程来执行您需要执行的操作,尽管我不知道您将如何使用这些函数调用它。

于 2013-04-05T04:58:23.250 回答