如何编写通用存储过程?

时间:2016-01-23 07:28:04

标签: sql-server sql-server-2008 stored-procedures

我在Visual Studio 2010中编写了两个存储过程。两者都返回了Id。因此两个存储过程的逻辑相同。那么如何编写一个公共存储过程来执行两个查询?

// First stored procedure
CREATE PROCEDURE dbo.spGetId
    (@Email VARCHAR(50))
AS
    SELECT Id 
    FROM tblUserRegistrations 
    WHERE Email = @Email

    RETURN

// Second stored procedure
CREATE PROCEDURE dbo.spGetProviderId
    (@Email VARCHAR(50))
AS
    SELECT Id 
    FROM tblProviderRegistrations 
    WHERE Email = @Email

    RETURN

因此两个存储过程中的逻辑是相同的。那么如何编写一个公共存储过程来执行这两个查询呢?我的意思是表名应该是动态的吗?

2 个答案:

答案 0 :(得分:0)

只需输入第二个输入变量来选择要查询的表,并在其中使用IF语句。

  CREATE PROCEDURE dbo.spGetId
        (
        @Email VARCHAR(50),
        @QuerUsers INT
        )
    AS
IF @QuerUsers = 1
BEGIN
        SELECT Id FROM tblUserRegistrations WHERE Email=@Email
        RETURN
END
SELECT Id FROM tblProviderRegistrations WHERE Email=@Email
  RETURN

答案 1 :(得分:0)

好的,如果您要为该SP发送同一封电子邮件以获取ID。您可以将sql查询更改为内连接。哪两个表将使用电子邮件相互加入。您还可以使用别名将名称放在单独的ID上。

Visit this link for reference(SQL Innerjoin)