인터넷을 며칠이나 노력하지 않고 검색했습니다. 올바른 방법으로 질문 할 수 없습니다. 마지막으로 새를 반환하는 사용자 정의 함수가SQL 저장 프로 시저 중복 OrderNumber 삽입
create procedure spx_insertItems
@insertNewOrderNr bit,
@orderNumber varchar(7),
@itemName varchar(255),
@count int
as
begin
set nocount on;
if (@insertNewOrderNr = 1)
begin
declare @newNr = (select dbo.fun_getNewOrderNr())
INSERT INTO Items (OrderNumber, ItemName, Count) values (@newNr, @itemName, @count)
select @newNr
end
else
begin
INSERT INTO Items (OrderNumber, ItemName, Count) values (@orderNumber, @itemName, @count)
select scope_identity()
end
end
: 나는 새로운 OrderNumber
만들어 필요에 따라 항목을 삽입하는 저장 프로 시저가 다음
create table Items
(
Id int identity(1,1),
OrderNumber varchar(7),
ItemName varchar(255),
Count int
)
:
는이 같은 SQL 테이블을 OrderNumber
:
create function dbo.fun_getNewOrderNr
()
return varchar(7)
as
begin
/* this func works well */
declare @output varchar(7)
declare @currentMaxNr varchar(7)
set @currentMaxNr = (isnull((select max(OrderNumber) from Items), 'some_default_value_here')
/* lets assume the @currentMaxNr is '01/2014', here comes logic that increments to @newValue='02/2014' and sets to @output, so: */
set @output = @newValue
return @output
end
Into 항목은 OrderNumber
에 속하지 않는 삽입 된 항목. 아이템이 OrderNumber
새가되어야 여부
, 프로 시저가 @insertNewOrderNr=1
호출, 즉 OrderNumber
@insertNewOrderNr=0
반면에 다음 항목을 삽입하는 데 사용할 수있는 새로운 주문 번호를 반환합니다.
때때로 @insertNewOrderNr
-2 요청이 동시에이 올 것을이 발생하고 문제가 - Items
, 같은 OrderNumber
을 얻을 다른 OrderNumbers
와 일치해야합니다.
나는 성공한 거래를 사용하려고했습니다.
테이블 구조는 나를 수정할 수 없습니다.
절차에 대한 동시 요청이 올 때 동일한 newOrderNumber
이 사용되지 않도록하려면 무엇이 올바른 방법일까요? 나는 여기까지 오랫동안 여기에 갇혀있다. 도와주세요.
fun_getNewOrderNr –
에 return @newValue는 무엇입니까? @newValue는 가장 높은 기존 OrderNumber에 대해 +1되는 OrderNumber입니다. 함수 자체가 매력처럼 작동하고 값이 정확합니다 (+1 만 증가) –
@paulbailey : 다시 포맷 해 주셔서 감사합니다. 지금은 더 읽기 쉽습니다. :) –