2014-09-24 90 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 2014-09-24 15:42:55

+1

你的問題有點不清楚。你說過你無法弄清楚,但也說明你的代碼有效。如果你的代碼可以工作,但你只是想讓它變得更好,你的問題可能更適合[代碼評論](http://codereview.stackexchange.com/)。 – skrrgwasme 2014-09-24 15:43:08

+0

是的,我知道這可能是一個問題,這是有很多用戶在系統上,因爲我認爲coulod發生的是,它可以重疊,因爲它必須回去和前進,完成保存記錄的一項任務 – Richard 2014-09-24 15:47:58

回答

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方法,它非常相似。