2013-04-01 183 views
0

我有兩個存儲過程,一個用於INSERT,另一個用於更新,我想將它們合併成一個,所以請你告訴我應該使用哪種方式?如何合併兩個存儲過程

CREATE PROCEDURE Tools 
(@CategoryID_1 int, 
@CategoryName_2 nvarchar(100), 
@Description_3 ntext) 

AS INSERT INTO Categories 
(CategoryID, 
CategoryName, 
Description) 

VALUES 
(@CategoryID_1, 
@CategoryName_2, 
@Description_3) 

CREATE PROCEDURE Tools1 

    (@CategoryID_1  [int], 
@CategoryID_2 [int], 
@CategoryName_3 [nvarchar](50), 
@Description_4  [ntext], 

AS UPDATE [Teachdb].[dbo].[Categories] 

SET [CategoryID] = @CategoryID_2, 
[CategoryName] = @CategoryName_3, 
[Description] = @Description_4, 

WHERE 
([CategoryID] = @CategoryID_1) 
go 

GO

+0

第二個程序似乎不完整 – praveen

+0

[*'ntext','text'和'image'數據類型將在未來版本的SQL Server中刪除。避免在新的開發工作中使用這些數據類型,並計劃修改當前正在使用它們的應用程序。使用'nvarchar(max)','varchar(max)'和'varbinary(max)'代替。*](http://msdn.microsoft.com/en-us/library/ms187993.aspx) –

+0

已解決)))) –

回答

1

在這裏,您可以通過傳遞@mode值合併在下路兩個店的程序代碼..

/* 
For Insert 
exec Tools @Mode='Insert', @CategoryID='1', @CategoryName='DemoCat', @Description='demoDesc' 

For Update 
exec Tools @Mode='UPDATE', @CategoryID='1', @CategoryName='DemoCatupdate', @Description='demoDescupdate' 

*/ 

CREATE PROCEDURE Tools 
(
    @Mode nvarchar(100), -- Use for insert or Update 
    @CategoryID int, 
    @CategoryName nvarchar(100), 
    @Description ntext 
) 

AS 
BEGIN 
    IF @Mode = 'INSERT' 
    BEGIN 
     INSERT INTO Categories (CategoryID, CategoryName, Description) 
     VALUES (@CategoryID, @CategoryName, @Description) 
    END 
    ELSE IF @Mode = 'UPDATE' 
    BEGIN 
     UPDATE [dbo].[Categories] 
      SET [CategoryID] = @CategoryID, 
       [CategoryName] = @CategoryName, 
       [Description] = @Description 
     WHERE ([CategoryID] = @CategoryID) 
    END 
END 
go 
+0

收到以下內容:服務器:消息170,級別15,狀態1,過程工具,第4行 第4行:'@CategoryID'附近的語法錯誤。 服務器:消息137,級別15,狀態1,過程工具,行11 必須聲明變量'@Mode'。 服務器:消息137,級別15,狀態1,過程工具,行14 必須聲明變量'@CategoryID'。 服務器:消息137,級別15,狀態1,過程工具,行16 必須聲明變量'@Mode'。 服務器:消息137,級別15,狀態1,過程工具,行19 必須聲明變量'@CategoryID'。 –

+0

請再次嘗試以上查詢 –

+0

服務器:消息156,級別15,狀態1,過程工具,行22 關鍵字'WHERE'附近的語法不正確。 –