+-
存储过程,只返回一行的值。

我只需要在某个地方通过 primary key 的人员,并在数据库中找到他,并将该表的一列值返回给调用者--它是一个 bit 列------。很简单,我是这样写的。我只是想看看是否有更好的方法来写存储过程来实现同样的目标。

CREATE PROCEDURE [dbo].[SP_GetPersonnelInfo]
    @PersonnelPK INT
AS
BEGIN
    SET NOCOUNT ON;

    IF EXISTS(SELECT 1 FROM dbo.Personnel AS p WHERE p.PersonnelPK = @PersonnelPK)
    BEGIN
        SELECT TOP (1) p.IsTeacher From Personnel p Where p.PersonnelPK = @PersonnelPK
    END;
END;
GO
2
投票

是的,有一个更好的方法--去掉 "我的 "和 "我的"。if exists - 其完全没有用。另外,你不需要 top(1)由于主键在定义上是唯一的,所以存储过程只会返回一条记录,如果找不到主键值,则不返回任何内容。

CREATE PROCEDURE [dbo].[SP_GetPersonnelInfo]
    @PersonnelPK INT
AS
    SET NOCOUNT ON;

    SELECT IsTeacher 
    FROM dbo.Personnel 
    WHERE PersonnelPK = @PersonnelPK;
GO
2
投票

首先,存储过程中的 exists 似乎是多余的,所以。

SELECT TOP (1) p.IsTeacher From Personnel p Where p.PersonnelPK = @PersonnelPK;

如果没有匹配的行,就不返回行。

第二,我完全不明白为什么你要使用这样的存储过程。 你可以创建一个用户定义的标量函数,这似乎更有用。

1
投票

是的,只是

SELECT p.IsTeacher 
FROM Personnel p 
WHERE p.PersonnelSys = @PersonnelPK

因为是主键,所以最多只能有一个结果,所以不需要用 TOP 1. 还有... IF EXISTS 当你可以直接返回结果时,就没有必要了。