【发布时间】:2021-03-01 18:48:01
【问题描述】:
我有数千个线程同时执行。 第一种线程是这样的T-SQL查询:
DECLARE @import_id int
IF EXISTS (
SELECT [id]
FROM [dbo].[Import]
WHERE created IS NULL
)
SELECT @import_id = [id]
FROM [dbo].[Import]
WHERE created IS NULL
ELSE
BEGIN
INSERT INTO [dbo].[Import] ([startdate])
SELECT GETDATE()
SELECT @import_id = @@IDENTITY
END
第二种线程是这样的T-SQL查询:
UPDATE [dbo].[Import] SET created = GETDATE() WHERE created IS NULL
所有这些类型的 T-SQL 查询在 事务 中执行,类型为 Read Commited。
问题:有时,第一个查询会返回 @import_id = NULL,但我希望 @import_id 有一些价值。
问题是Read Commited事务类型如何避免这种情况?
【问题讨论】:
标签: sql-server multithreading tsql concurrency transactions