MSSQL竞赛条件
此SQL存储过程是否会遇到竞争条件问题MSSQL竞赛条件,sql,sql-server,stored-procedures,race-condition,Sql,Sql Server,Stored Procedures,Race Condition,此SQL存储过程是否会遇到竞争条件问题 ALTER PROCEDURE [dbo].[basket_add] @item_no BIGINT, @child_item_no BIGINT, @order_no NVARCHAR(50), @qty SMALLINT, @curr_code NVARCHAR(3), @store_id TINYINT AS BEGIN SET NOCOUNT ON; BEGIN TRY
ALTER PROCEDURE [dbo].[basket_add]
@item_no BIGINT,
@child_item_no BIGINT,
@order_no NVARCHAR(50),
@qty SMALLINT,
@curr_code NVARCHAR(3),
@store_id TINYINT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
DECLARE @price_gbp DECIMAL(18,2), @price_curr DECIMAL(18,2);
DECLARE @rtn_tbl_basket TABLE (id bigint);
IF @qty > 0
BEGIN
--Call product price function to get latest product price
SELECT @price_gbp = gbp_price
,@price_curr = curr_price
FROM product_price(@item_no,@child_item_no,@curr_code,@store_id) WHERE curr_code = @curr_code;
--Ensure price exists for specified product
DECLARE @errormsg NVARCHAR(100) = 'Errors found, product/price does not exist: ' + CAST(@item_no AS NVARCHAR(10)) + '-' + CAST(@child_item_no AS NVARCHAR(10));
IF ISNULL(@price_gbp,0) = 0 RAISERROR (@errormsg, 16, 2) WITH SETERROR;
INSERT INTO basket(order_no, item_no,child_item_no, qty, price, curr_price, curr_code)
OUTPUT inserted.id INTO @rtn_tbl_basket(id)
VALUES (@order_no,@item_no,@child_item_no,@qty,@price_gbp, @price_curr, @curr_code)
--return success
SELECT id AS rtn_basket_id ,1 AS success FROM @rtn_tbl_basket
END
END TRY
BEGIN CATCH
SELECT
--return failure
(SELECT id FROM @rtn_tbl_basket) as rtn_basket_id,
0 AS success,
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
END CATCH
END
你能更具体地回答你的问题吗?解释你的代码在做什么,以及你认为问题出在哪里,否则你希望用户在回答你的问题之前消化并理解你的SQL。我知道竞争问题通常会发生在胜利者身上,但是我想知道在上面的SQL中是否有可能在函数返回价格之前插入到篮子中?或者调用此代码的其他进程可能会出现问题?您是指可能有多个进程运行此过程的情况吗?SQL语句是按顺序运行的,因此,如果您在插入之前询问最新价格,则不可能出现竞争条件。感谢Tanner,Elliveny yes此代码将由多个进程调用