缺少存储过程体

S M*_*S M 1 sql-server stored-procedures sql-server-2017

我正在浏览我们的一个数据库以回答老板的问题,我偷看了一个存储过程。像往常一样,我在 SSMS 中右键单击它,单击 Script stored procedure as... 然后创建,令我惊讶的是,我发现的只是 CREATE PROCEDURE 语句: 在此处输入图片说明

为了仔细检查,我让其他人看,他们得到了同样的东西。他们以数据库所有者身份登录,我以系统管理员身份登录。我接下来跑了

select
m.definition
from sys.procedures p
left join sys.sql_modules m on p.object_id=m.object_id
where p.name in ('spPUpdateContactUserLockout', 'spPLINK_SYNC_CONTACT');
Run Code Online (Sandbox Code Playgroud)

并得到了这个(注意我包含了另一个存储过程以进行比较) 在此处输入图片说明

我以前没见过这个。曾经。我不认为没有定义主体就可以创建存储过程,并且在此实例上的多个数据库中有几个这样的过程。在这一点上我很担心,但我不确定我是否不必担心,或者我是否应该比现在更担心。

此实例是 SQL Server 2017 Standard x64 RTM-CU11,我使用的是 SSMS 17.9。任何见解表示赞赏!

Aar*_*and 6

是的,这是可能的,不需要身体。怎么弄到这个地步?你的猜测和我们的一样好。这很容易做到,但我们不可能知道这是人为错误还是脚本或工具的某种截断。

CREATE PROCEDURE dbo.blat
AS
GO
EXEC dbo.blat;
Run Code Online (Sandbox Code Playgroud)

输出:

命令成功完成。

很高兴有源代码控制来解决这种事情。

但是,如果您担心,您应该检查您的应用程序和其余的过程,看看是否有任何东西调用了这个空过程,并且实际上希望它做任何事情。错误处理、单元测试等可能只是因为它没有抛出错误而通过。