2012-02-11 4 views
11

값만 전달해야하는 저장 프로 시저를 하나 만들고 여러 테이블에서 여러 값을 가져와야합니다. 나는 이런 식으로하려고 노력하지만 선언 및 집합 변수를 사용하여 저장 프로 시저 만들기

근처의 구문이 잘못

등의 표시 오류는 스칼라 변수가

Declare @OrderItemID AS INT 
DECLARE @AppointmentID AS INT 
DECLARE @PurchaseOrderID AS INT 
DECLARE @PurchaseOrderItemID AS INT 
DECLARE @SalesOrderID AS INT 
DECLARE @SalesOrderItemID AS INT 

SET @OrderItemID = (SELECT OrderItemID FROM [OrderItem] WHERE OrderID = @OrderID) 

SET @AppointmentID = (SELECT AppoinmentID FROM [Appointment] WHERE OrderID = @OrderID) 

SET @PurchaseOrderID = (SELECT PurchaseOrderID FROM [PurchaseOrder] WHERE OrderID = @OrderID) 
+4

'@ OrderID'가 선언 된 곳은 어디입니까? 전체 절차를 게시하십시오. 게시 한 코드에'시작 '이 없습니다. 또한 왜 결과를 사용하지 않고 변수에 할당하는 이유는 무엇입니까? 이들이 출력 매개 변수가되어야합니까? –

+1

주문에 대해 많은 주문 항목, 약속 또는 구매 주문이 있다고 가정하기 때문에 변수에 할당 할 항목을 설명 할 수 있습니까? @Martin이 제안한대로 모든 코드를 게시하고 실제 목표, 샘플 데이터 및 원하는 결과를 게시하는 데 도움이 될 수도 있습니다. –

답변

3

을 @OrderID 선언해야

시작 주문 ID를 전달하고 싶다고 가정합니다. So :

CREATE PROCEDURE [dbo].[Procedure_Name] 
(
    @OrderID INT 
) AS 
BEGIN 
    Declare @OrderItemID AS INT 
    DECLARE @AppointmentID AS INT 
    DECLARE @PurchaseOrderID AS INT 
    DECLARE @PurchaseOrderItemID AS INT 
    DECLARE @SalesOrderID AS INT 
    DECLARE @SalesOrderItemID AS INT 

    SET @OrderItemID = (SELECT OrderItemID FROM [OrderItem] WHERE OrderID = @OrderID) 
    SET @AppointmentID = (SELECT AppoinmentID FROM [Appointment] WHERE OrderID = @OrderID) 
    SET @PurchaseOrderID = (SELECT PurchaseOrderID FROM [PurchaseOrder] WHERE OrderID = @OrderID) 
END 
+0

저는 개인적인 취향이라고 생각 합니다만, 특히 단일 값에 대해서'SET'을 사용하여 무엇이 진행되고 있는지 명확하게 보여줍니다. 그렇지 않으면 전체'SELECT' 문에서 숨겨집니다. – twilson

+1

반면에'ORDER BY'없이'TOP'을 사용했기 때문에 결과가 정의되지 않았습니다. 임의의 행을 선택할 것입니다. 나는'TOP'을 생략하는 것을 선호 할 것입니다 - 내부 쿼리가 오직 하나의 행만을 선택한다는 것을 의미한다면, 그렇지 않으면 에러를 얻습니다. 'SELECT @OrderItemID ='또는'TOP 1'이 접근하면 임의의 행을 자동으로 얻습니다. 'OrderID'가 프라이 머리 키인 경우에는 한 가지이지만, 다른 경우에는 더 많은 정의가 필요하다고 생각합니다. 어떤 AppointmentID/PurchaseOrderID가 실제로 필요한지에 대한 정의가 필요합니다. 가장 오래된? 가장 최근에? 가장 높은 가치를 가진 사람? –

+0

TOP에 대한 공정한 의견 – twilson

15

이 구문을 시도해야합니다 - 당신이 당신의 저장 프로 시저에 대한 매개 변수@OrderID을 갖고 싶어 가정 : 물론

CREATE PROCEDURE dbo.YourStoredProcNameHere 
    @OrderID INT 
AS 
BEGIN 
DECLARE @OrderItemID AS INT 
DECLARE @AppointmentID AS INT 
DECLARE @PurchaseOrderID AS INT 
DECLARE @PurchaseOrderItemID AS INT 
DECLARE @SalesOrderID AS INT 
DECLARE @SalesOrderItemID AS INT 

SELECT @OrderItemID = OrderItemID 
FROM [OrderItem] 
WHERE OrderID = @OrderID 

SELECT @AppointmentID = AppoinmentID 
FROM [Appointment] 
WHERE OrderID = @OrderID 

SELECT @PurchaseOrderID = PurchaseOrderID 
FROM [PurchaseOrder] 
WHERE OrderID = @OrderID 

END 

만 작동하는지 정확히 하나 개의 값을 반환하는 경우 (복수 값이 아님)

관련 문제