Sql server 如何合并两个存储过程
我有两个存储过程,一个用于插入,另一个用于更新,我想将它们合并到一个存储过程中,您能告诉我应该使用哪个存储过程吗Sql server 如何合并两个存储过程,sql-server,sql-server-2008,stored-procedures,Sql Server,Sql Server 2008,Stored Procedures,我有两个存储过程,一个用于插入,另一个用于更新,我想将它们合并到一个存储过程中,您能告诉我应该使用哪个存储过程吗 CREATE PROCEDURE Tools (@CategoryID_1 int, @CategoryName_2 nvarchar(100), @Description_3 ntext) AS INSERT INTO Categories (CategoryID, CategoryName, Description) VALUES (@CategoryID_1
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)
去
转到这里,您可以通过传递@Mode value以下面的方式合并两个存储过程代码
/*
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
如果无法更改存储过程的结构(通过添加附加参数),则可以使用MERGE语句
不过有一点值得注意——虽然我喜欢MERGE语句,但它似乎有一种被发现的感觉。我建议不要使用它,除非你了解你在做什么(没有cargo cult编程),并且已经检查了问题,看看你的场景是否包括在内 第二个过程似乎不完整:服务器:Msg 170,级别15,状态1,过程工具,第4行第4行:“@CategoryID”附近的语法不正确。服务器:Msg 137,级别15,状态1,过程工具,第11行必须声明变量'@Mode'。服务器:Msg 137,级别15,状态1,过程工具,第14行必须声明变量'@CategoryID'。服务器:Msg 137,级别15,状态1,过程工具,第16行必须声明变量'@Mode'。服务器:Msg 137,15级,状态1,过程工具,第19行必须声明变量“@CategoryID”。服务器:Msg 156,15级,状态1,过程工具,第22行关键字“WHERE”附近的语法不正确。如果你愿意,请提问。我很高兴,伙计,但上面说要投票,我需要15个声誉!
/*
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