У меня есть 2 связанных экземпляра SQL сервера, работающего на моем P C, один из которых содержит customer
таблицу
CREATE TABLE customer (
id int IDENTITY(1, 1) PRIMARY KEY,
firstName varchar(50),
lastName varchar(50),
address varchar(50),
orders_count int
);
А второй содержит orders
таблицу
CREATE TABLE orders (
id int IDENTITY(1, 1) PRIMARY KEY,
customer_id int,
price int,
name varchar(50)
);
Теперь я могу запускать простые хранимые процедуры, которые выполняют SELECT
из обоих
CREATE PROC select_customer_order
@customer_id int
AS
BEGIN
SELECT * FROM [LAPTOP-D3HS3S3U\SQLEXPRESS_NODE2].[master].[dbo].[order] order_db
INNER JOIN [LAPTOP-D3HS3S3U\SQLEXPRESS].[master].[dbo].[customer] customer_db
ON order_db.customer_id = customer_db.id WHERE order_db.customer_id = @customer_id
END
Но я хочу создать транзакцию, включающую обе таблицы, которая выглядит следующим образом
CREATE PROC create_customer_order
@customer_id int,
@price int,
@name varchar
AS
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO [LAPTOP-D3HS3S3U\SQLEXPRESS_NODE2].[master].[dbo].[orders] (customer_id, price, name)
VALUES (@customer_id, @price, @name)
UPDATE customer_db
SET customer_db.orders_count = customer_db.orders_count + 1
FROM [LAPTOP-D3HS3S3U\SQLEXPRESS].[master].[dbo].[customer] AS customer_db
WHERE customer_db.id = @customer_id
COMMIT
END TRY
BEGIN CATCH
ROLLBACK
RAISERROR('Error while creating customer order', 1, 1)
END CATCH
Запросы на вставку и обновление по отдельности работают нормально, но если я запускаю эту процедуру, мой запрос застревает. Он продолжает выполняться без каких-либо ошибок и сообщений, пока я не прерву его.
Есть идеи, почему? Что с этим не так?