SQL Зависание транзакции на сервере - PullRequest
0 голосов
/ 11 января 2020

У меня есть 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

Запросы на вставку и обновление по отдельности работают нормально, но если я запускаю эту процедуру, мой запрос застревает. Он продолжает выполняться без каких-либо ошибок и сообщений, пока я не прерву его.

Есть идеи, почему? Что с этим не так?

...