将“插入/更新/删除/选择”放入单个存储过程是否是不好的做法?

Tod*_*nce 1 sql stored-procedures

因此,我们被告知存储过程已优化,我们绝不应该将sql语句放入代码中。

但是我不想为我需要的每种查询或数据库操作类型制作10,000个存储过程。

因此,我已经开始执行以下操作(将所有功能放入一个sproc中):

CREATE PROCEDURE [dbo].[spTABLENAME]
@Function nvarchar = null,
@ID int = null,
@MoreVariables int = null

AS
BEGIN
    SET NOCOUNT ON;

IF @Function = 'UPDATE'
    BEGIN
        UPDATE UPDATESTUFF WHERE ID = @ID;
    END
ELSE IF @Function = 'INSERT'
    BEGIN
        INSERT INTO TABLENAME (STUFF)
    END
ELSE IF @Function = 'SELECT'
    BEGIN
        SELECT * FROM TABLENAME  WHERE ID= @ID
    END
ELSE IF @Function = 'DELETE'
    BEGIN
        DELETE * FROM TABLENAME WHERE ID = @ID  
    END
Run Code Online (Sandbox Code Playgroud)

结束

有人可以告诉我这种做法是否有误?

Kev*_*ild 5

使用单个“ UPSERT”过程是相当普遍的,但是也有可能返回数据的过程对我来说并不适合。

要记住的另一件事是,如果您使用单独的存储过程,则可以从缓存计划中获得一些额外的好处,而使用多合一例程可能无法从中受益。