2014-09-24 3 views
0

문제점을 해결하는 방법을 찾을 수 없어서 두 개의 SQL 문을 작성했습니다.두 개의 SQL 문을 하나로 결합하기

하나는 get_ID이고 다른 하나는 Save Record입니다. 나는 레코드를 저장하고 VB에서 프론트 엔드에 필드에 ID를 입력했는지 확인하고 싶지 않다면 할당 레코드를 할당했으나 여기까지 계산할 수 없었습니다. . 작동하지만 더 나은 방법이 있어야한다는 것을 알고 있습니다. 이 문제가 큰 도움이 될 것입니다.

ALTER PROCEDURE [dbo].[Product_GetID] 
AS 
BEGIN 
    DECLARE @NewProductID as int 

    /* Get New Record */ 
    SET @NewProductID = (SELECT ISNULL(MAX(ProductID) + 1, 1) FROM Product) 

    SELECT 
     ISNULL(MAX(ProductID) + 1, 1) AS NewIDNo 
    FROM Product 

    INSERT INTO Product (ProductID, CategoryID, Description, Price) 
    VALUES (@NewProductID, 0, '', 0) 
END 

ALTER PROCEDURE [dbo].[Product_SaveRecord] 
    @ProductID as int, 
    @CategoryID as tinyint, 
    @Description as varchar(80), 
    @FullDescription as varchar(240), 
    @Price as decimal(8, 2), 
    @MarkupPer as decimal(8, 2), 
    @LabourHours as decimal(8, 2), 
    @LabourRate as decimal(8, 2), 
    @Stock as integer 
AS 
BEGIN 
    /* Update Record */ 
    UPDATE Product 
    SET CategoryID = @CategoryID, 
     Description = @Description, 
     FullDescription = @FullDescription, 
     Price = @Price, 
     MarkupPer = @MarkupPer, 
     LabourHours = @LabourHours, 
     LabourRate = @LabourRate, 
     Stock = @Stock 
    WHERE ProductID = @ProductID 
END 
+0

당신이 묻는 것이 명확하지 않지만 [MERGE T-SQL] (http://msdn.microsoft.com/en-us/library/bb510625.aspx) 문을 보았습니까? – Steve

+1

귀하의 질문에 약간 분명하지 않습니다. 당신은 당신이 그것을 알아낼 수 없다고 말했고, 당신의 코드가 작동한다고 말했다. 코드가 작동하지만 코드를 더 잘 만들고 싶다면 [코드 검토] (http://codereview.stackexchange.com/)에 대한 질문이 더 적합 할 수 있습니다. – skrrgwasme

+0

그래, 거기에 거기에 문제가있을 수 있습니다 내가 coulod 무슨 일이 일어날 것 같아 시스템을 통해 사용자가 많이 있다는 것을 알고 그것이 레코드를 저장하는 하나의 작업을 완료하기 위해 앞뒤로 가야하기 때문에 무릎을 꿇을 수 있습니다 – Richard

답변

0

다음은 코드를 약간 변경 한 것입니다. 나는 더가 확신 그러나 이것은 도움이 될 것입니다 : 당신이 더 편안로서

ALTER PROCEDURE [dbo].[Product_SaveRecord] 
    @ProductID as int, 
    @CategoryID as tinyint, 
    @Description as varchar(80), 
    @FullDescription as varchar(240), 
    @Price as decimal(8, 2), 
    @MarkupPer as decimal(8, 2), 
    @LabourHours as decimal(8, 2), 
    @LabourRate as decimal(8, 2), 
    @Stock as integer 
AS 
BEGIN 
    IF @ProductID IS NULL BEGIN 
     SET @ProductID = (SELECT ISNULL(MAX(ProductID) + 1, 1) FROM Product) 

     INSERT INTO Product (ProductID, CategoryID, Description, Price) --Add the rest of the columns 
     VALUES (@NewId, @CategoryID, @Description, @Price) --Add the rest of the columns 
    END ELSE BEGIN 
     /* Update Record */ 
     UPDATE Product 
     SET CategoryID = @CategoryID, 
      Description = @Description, 
      FullDescription = @FullDescription, 
      Price = @Price, 
      MarkupPer = @MarkupPer, 
      LabourHours = @LabourHours, 
      LabourRate = @LabourRate, 
      Stock = @Stock 
     WHERE ProductID = @ProductID 
    END 
END 

, 당신은 MERGE 방법도 매우 유사하다 사용할 수 있습니다.

관련 문제