4

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

例如:

我有Person一张Person_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语句。让我知道这是不是编程的好习惯?我无法在谷歌、雅虎和其他搜索引擎中得到具体的解释。请帮助我。

4

1 回答 1

2

我会分成不同的程序。

一般来说,应该有一个方法做一件事。更易于开发、调试、部署和维护。

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

此外,它不仅仅是 18 个结果集,在生成它们的过程中还有很多代码。这意味着如果/当重新编译过程时,优化器需要做更多的工作,并且可能需要相当长的时间。

可能还有一些我忘记了..

于 2016-07-27T08:19:43.783 回答