我在SQL Server中有一个存储过程,该存储过程包含多个结果集(即它包含多个SELECT语句)。它是编程的好习惯吗?

例如:

我有一个PersonPerson_Address表。

创建表:人

CREATE TABLE [dbo].[Person]
(
    [id] [int] IDENTITY(1,1) NOT NULL,
    [firstName] [varchar](50) NOT NULL,
    [lastName] [varchar](50) NOT NULL,
)


插入数据:

INSERT INTO dbo.Person([firstName], [lastName)
VALUES ('John', 'Michle')

INSERT INTO dbo.Person([firstName], [lastName])
VALUES ('Emma', 'Watson')
GO


创建表Person_Address:

CREATE TABLE [dbo].[Person_Address]
(
    [id] [int] IDENTITY(1,1) NOT NULL,
    [pid] [int] NOT NULL,
    [address] [varchar](50) NOT NULL,
    [city] [varchar](50) NOT NULL,
)


插入数据:

INSERT INTO dbo.Person_Address([pid], [address], [city], [ispreferred])
VALUES ('1', 'Eiffel Tower', 'Paris'])

INSERT INTO dbo.Person_Address([pid], [address], [city], [ispreferred])
VALUES ('1', 'Donghai Bridge', 'China')

INSERT INTO dbo.Person_Address([pid], [address], [city], [ispreferred])
VALUES ('2', 'Nile River', 'Egypt')
GO


存储过程返回多个结果集

CREATE PROCEDURE GetPersonInfoMultiRS
    @PersonID int
AS
BEGIN
    SET NOCOUNT ON;
    SELECT p.* FROM Person p WHERE p.id = @PersonID;
    SELECT pa.* FROM Person_Address pa WHERE pa.pid = @PersonID;
END
GO


在上面的存储过程中,GetPersonInfoMultiRS包含两个SELECT语句,在我的真实项目中,我有18个SELECT语句。让我知道这是编程的好习惯吗?在Google,雅虎和其他搜索引擎中,我无法对此进行具体解释。请帮助我。

最佳答案

我将分成不同的过程。

通常,应该只有一种方法可以做一件事情。易于开发,调试,部署和维护。

在客户端使用数据之前,SQL Server不会认为任务已完成(这将累积为ASYNC_NETWORK_IO等待)。您可能会保留不必要的资源。超时的可能性也更大。

此外,它不仅是18个结果集,而且是过程中产生它们的大量代码。如果/在重新编译过程时,这意味着优化程序需要进行大量工作,并且可能会花费大量时间。

我可能还忘记了其他一些东西。

关于sql - 在单个存储过程中返回多个结果集是一个好习惯,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38607249/

10-09 16:50
查看更多