Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 检查记录是否存在并以最有效的方式退出_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 2008 检查记录是否存在并以最有效的方式退出

Sql server 2008 检查记录是否存在并以最有效的方式退出,sql-server-2008,tsql,Sql Server 2008,Tsql,我的存储过程中有以下脚本 IF EXISTS(SELECT * FROM dbo.MBLPosition WHERE PositionGKey = @i_PositionGKey) RETURN -- DO SOME STUFF HERE INSERT dbo.MBLPosition.. 我正在将一些数据插入到单记录表中。首先我检查它是否已经存在,然后我进行一些处理并插入记录 处理可能需要一些时间,比如说2秒钟。有时调用随后进入,我会遇到约束异常。罕见,但也会发生。我想避免这种情况,同时,

我的存储过程中有以下脚本

IF EXISTS(SELECT * FROM dbo.MBLPosition WHERE PositionGKey = @i_PositionGKey) RETURN

-- DO SOME STUFF HERE

INSERT dbo.MBLPosition..
我正在将一些数据插入到单记录表中。首先我检查它是否已经存在,然后我进行一些处理并插入记录

处理可能需要一些时间,比如说2秒钟。有时调用随后进入,我会遇到约束异常。罕见,但也会发生。我想避免这种情况,同时,如果记录已经存在,我不想进行这种处理。构造此代码的最佳方法是什么,这样我就不会做额外的工作并避免异常

这是一张很大的桌子,随时都有记录。当重复数据进入并且不需要花费太多处理时间时,过滤掉重复数据的最佳方法是什么?

您应该使用足够的隔离级别,以使测试和后续插入成为原子级

如果遇到死锁,您可能需要打开快照隔离,正如您所说,处理可能需要一些时间,尽管2秒似乎很长……

您应该使用足够的隔离级别,以使测试和后续插入成为原子的


如果遇到死锁,您可能需要打开快照隔离,正如您所说,处理可能需要一些时间,尽管2秒似乎很长……

一种方法是执行检查,然后始终可以使用try/catch尝试插入。正如@MitchWheat所指出的,您可以通过适当的事务处理来消除这种情况

IF NOT EXISTS
(
  SELECT 1 FROM dbo.MBLPosition 
  WHERE PositionGKey = @i_PositionGKey
)
BEGIN
  BEGIN TRY
    -- do some stuff here
    INSERT dbo.MBLPosition..
  END TRY
  BEGIN CATCH 
    PRINT 'Not an exception, but insert failed';
  END CATCH
END

我在这里讨论了一个类似的主题:

一种方法是执行检查,然后始终可以使用try/catch尝试插入。正如@MitchWheat所指出的,您可以通过适当的事务处理来消除这种情况

IF NOT EXISTS
(
  SELECT 1 FROM dbo.MBLPosition 
  WHERE PositionGKey = @i_PositionGKey
)
BEGIN
  BEGIN TRY
    -- do some stuff here
    INSERT dbo.MBLPosition..
  END TRY
  BEGIN CATCH 
    PRINT 'Not an exception, but insert failed';
  END CATCH
END

我在这里讨论了一个类似的主题:

您可能想要使用,并且仅当不匹配零件时才使用。这将是测试和插入一次。可能的重复您可能想使用,并做时不匹配的部分只。这将是测试和插入一次。可能的副本,你能详细说明正确的交易处理吗?你能详细说明正确的交易处理吗?谢谢你,你的文章帮助我作出决定。在我的例子中,重复的百分比非常小,所以我甚至可以从使用TRY-CATCH中获益。谢谢你,你的文章帮助我做出了决定。在我的例子中,重复的百分比非常小,所以我甚至可以从使用TRY-CATCH中获益。