2011-08-19 4 views
0

로 열을 받고 난 난 그냥 삽입 한 orderReference에 대한 값을 다시 얻을 수있는 방법, 절차 SQL 서버 2008, 다시 출력 매개 변수

ALTER PROCEDURE [dbo].[sp_web_orders_insert] 
(
    @userId int = default, 
    @custId int = default, 
    @orderDate datetime = default, 
    @orderTotal money = default, 
    @statusId int = default, 
    @orderReference varchar(50) = default, 
    @custReference varchar(50) = default, 
    @order_ID INT output, 
    @orderReferenceOutput varchar(50) output 
) 
AS 
    SET NOCOUNT OFF; 

    INSERT INTO [web_orders] ([user_ID], [cust_ID], [orderDate], [orderTotal], [statusId], [orderReference], [custReference]) 
    VALUES (@userId, @custId, @orderDate, @orderTotal, @statusId , 'PLC' + REPLICATE('0', (7 - LEN((select MAX(order_ID) from web_orders)))) + CAST((select(max(order_ID)+1) from web_orders) AS VARCHAR(5)), @custReference); 

    SET @order_ID = @@IDENTITY 

    SET @orderReferenceOutput = select top 1 orderReference from web_orders 

그러나 선택 근처에 구문 문제를 점점 저장된 다음습니까?

+2

코드, XML 또는 데이터 샘플을 게시하는 경우 텍스트 편집기에서 해당 줄을 강조 표시하고 편집기 도구 모음에서 "코드 샘플"단추 ('{}) '를 클릭하여 멋지게 서식을 지정하고 구문 강조 표시하십시오. 그것! –

답변

3

두 지점 :

  • 사용하는 대신 @@IDENTITYSCOPE_IDENTITY() (그것을 위해 why this is here 또는 Google를 참조 ...)
  • 은 당신의 가치를 같이 다시

뭔가를 얻을 수있는 SELECT 문을 사용 :

SET @order_ID = SCOPE_IDENTITY() 

SELECT 
    @orderReferenceOutput = SELECT orderReference 
          FROM dbo.web_orders 
          WHERE order_Id = @order_ID 
0

다음 코드 부분을 시도, 그것은 당신에게

SET @orderReferenceOutput = select @orderReference=(top 1 orderReference) from web_orders 
0
select @order_ID = order_ID, @orderReferenceOutput = orderReference 
    from dbo.web_orders 
    where order_ID = SCOPED_IDENTITIY(); 

도움이 될 것입니다 또는 출력 매개 변수를 제거하고 직접 삽입 한 레코드를 반환 희망 :

select * from dbo.web_orders where order_Id = SCOPED_IDENTITIY(); 

예. 프로 시저는 쿼리와 마찬가지로 데이터를 반환 할 수 있습니다.