C# 如何编写线程安全的SQL Server存储过程
我有一些正在执行多个查询的存储过程。为了得到插入的最后一个标识,我使用了导致问题的当前标识 我的问题是,我可以在T-SQL中使用像C这样的锁语句,这样它就可以是线程安全的吗 编辑:我正在使用的代码C# 如何编写线程安全的SQL Server存储过程,c#,sql-server,C#,Sql Server,我有一些正在执行多个查询的存储过程。为了得到插入的最后一个标识,我使用了导致问题的当前标识 我的问题是,我可以在T-SQL中使用像C这样的锁语句,这样它就可以是线程安全的吗 编辑:我正在使用的代码 INSERT INTO activities (creator ,title ,description) VALUES (@Creator ,@Tile ,@Description) SET @ActivityId = IDENT_CURRENT('d
INSERT INTO activities
(creator
,title
,description)
VALUES
(@Creator
,@Tile
,@Description)
SET @ActivityId = IDENT_CURRENT('dbo.activities');
INSERT INTO [dbo].activity_cfs
([activity_id],
[cf_id],
[cf_field_name],
[field_key],
[value])
SELECT
@ActivityId,
cf_id,
cf_field_name,
field_key,
value
FROM @ActivityCustomFields
@ActivityCustomFields是我的临时表。很可能您应该使用而不是当前标识。有许多不同的解释,例如: 但是,如果您确实需要保证代码的某些部分不是由多个线程同时运行,那么您可以使用 根据您添加到问题中的代码,我现在非常确定您应该简单地使用SCOPE_IDENTITY,如下所示:
INSERT INTO activities
(creator
,title
,description)
VALUES
(@Creator
,@Tile
,@Description);
SET @ActivityId = SCOPE_IDENTITY();
INSERT INTO [dbo].activity_cfs
([activity_id],
[cf_id],
[cf_field_name],
[field_key],
[value])
SELECT
@ActivityId,
cf_id,
cf_field_name,
field_key,
value
FROM @ActivityCustomFields;
SCOPE_IDENTITY函数返回在同一会话和同一作用域中创建的最后一个标识。
当前标识返回在任何会话中为特定表或视图创建的最后一个标识。因此,如果有多个线程同时运行此过程,IDENT_CURRENT将看到在其他线程中生成的标识,这是您不希望看到的 您很可能应该使用当前标识而不是当前标识。有许多不同的解释,例如: 但是,如果您确实需要保证代码的某些部分不是由多个线程同时运行,那么您可以使用 根据您添加到问题中的代码,我现在非常确定您应该简单地使用SCOPE_IDENTITY,如下所示:
INSERT INTO activities
(creator
,title
,description)
VALUES
(@Creator
,@Tile
,@Description);
SET @ActivityId = SCOPE_IDENTITY();
INSERT INTO [dbo].activity_cfs
([activity_id],
[cf_id],
[cf_field_name],
[field_key],
[value])
SELECT
@ActivityId,
cf_id,
cf_field_name,
field_key,
value
FROM @ActivityCustomFields;
SCOPE_IDENTITY函数返回在同一会话和同一作用域中创建的最后一个标识。
当前标识返回在任何会话中为特定表或视图创建的最后一个标识。因此,如果有多个线程同时运行此过程,IDENT_CURRENT将看到在其他线程中生成的标识,这是您不希望看到的 在我的理解中,SCOPE_IDENTITY将是一种方式。请遵循以下链接,即在SQL Server中使用SCOPE_标识时始终是线程安全的:
在我的理解中,范围和身份将是一条出路。请遵循以下链接,即在SQL Server中使用SCOPE_标识时始终是线程安全的:
请给我一些密码。我们不能假设您编写了正确的代码:-请编写一些代码。我们不能假设您编写了正确的代码:-