+-

我只需要在某个地方通过 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 当你可以直接返回结果时,就没有必要了。