我现在遇到SQL Server表锁问题。我正在用C#开发。
我的查询在1笔交易下运行。
我将其命名为最简单的识别方式。 “setTransaction”
setTransaction仅适用于“INSERT / UPDATE / DELETE”。
SELECT
。我将使用SqlDataAdapter
。INSERT
/ UPDATE
或DELETE
,则可以使用setTransaction
。这是每个...的表结构。
[LOG](
[log_id] [int] IDENTITY(1,1) NOT NULL,
[subject] [text] NOT NULL,
[query] [text] NOT NULL,
[log_datetime] [datetime] NOT NULL,
[user_id] [int] NOT NULL,
[emp_id] [int] NULL,
[old_value] [text] NULL
)
[RESERVATION_DETAIL](
[**reservation_detail_id**] [int] IDENTITY(1,1) NOT NULL,
[reservation_id] [int] NOT NULL,
[spa_program_id] [int] NULL,
[price] [int] NULL,
[oil] [int] NULL
)
[RESERVATION_THERAPIST](
[reservation_therapist_id] [int] IDENTITY(1,1) NOT NULL,
[**reservation_detail_id**] [int] NOT NULL,
[therapist_id] [int] NOT NULL,
[hours] [int] NULL,
[mins] [int] NULL
)
[LOG]正在独立工作。 [RESERVATION_DETAIL]通过reservation_detail_id
连接到[RESERVATION_THERAPIST]问题是......
我选择“ RESERVATION_DETAIL ”中的记录,其中reservation_detail_id = 25
SELECT * FROM RESERVATION_DETAIL WHERE RESERVATION_DETAIL_ID = 25
我使用来自2.
INSERT INTO LOG(subject,query,log_datetime,user_id,emp_id,old_value)VALUES( '从RES_DETAIL删除TEMP RESERVE [RES_DETAIL_ID:25]', '从RESERVATION_DETAIL DELERE RESERVATION_DETAIL_ID = 25'删除, CURRENT_TIMESTAMP, 1, NULL,'reservation_detail_id:25 | reservation_id:25 | spa_program_id:-1 | price:| oil:' )
现在我从“ RESERVATION_DETAIL ”中删除,其中reservation_detail_id = 25
然后我想删除“ RESERVATION_THERAPIST ”中的记录,其中reservation_detail_id = 25
从RESERVATION_DETAIL DELETE RESERVATION_DETAIL_ID = 25
我选择了一个来自“ RESERVATION_THERAPIST ”的记录,其中reservation_detail_id = 25 < -----我在这里锁定了!!
SELECT * FROM RESERVATION_THERAPIST WHERE RESERVATION_DETAIL_ID = 25
我使用5中的数据插入表“ LOG ”。
因此执行了上述步骤。 第5步(关于表“ RESERVATION_THERAPIST ”)现在在第3步(关于表“ LOG ”)等待完成,但它从未完成。
我不明白为什么我插入表 LOG 但它把锁放在表 B !或者这不是锁!?
在上面的步骤之前有一些查询插入到LOG中没有任何问题。
现在我可以解决我的问题了。
查询和步骤已经确定。
但我忘了表“RESERVATION_DETAIL”有一个触发器,它将在提交DELETE查询后立即运行。
因此,触发器将自动删除“RESERVATION_THERAPIST”中的记录,此步骤在交易下。
所以“RESERVATION_THERAPIST”在“DELETE FROM RESERVATION_DETAIL”之后但在“SELECT * FROM RESERVATION_THERAPIST”之前被锁定了
答案 0 :(得分:1)
在删除之前,有几件事可能导致表被锁定:
答案 1 :(得分:0)
你因为从中删除而锁定了B.