我正在浏览我们的一个数据库以回答老板的问题,我偷看了一个存储过程。像往常一样,我在 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');
我以前没见过这个。曾经。我不认为没有定义主体就可以创建存储过程,并且在这个实例的多个数据库中有几个这样的过程。在这一点上我很担心,但我不确定我是否不必担心,或者我是否应该比现在更担心。
此实例是 SQL Server 2017 Standard x64 RTM-CU11,我使用的是 SSMS 17.9。任何见解表示赞赏!
是的,这是可能的,不需要身体。怎么会变成这样?你的猜测和我们的一样好。这很容易做到,但我们不可能知道这是人为错误还是脚本或工具的某种截断。
输出:
很高兴有源代码控制来解决这种问题。
不过,如果您担心的话,您应该检查您的应用程序和其余的过程,看看是否有任何东西调用了这个空过程并且实际上期望它做任何事情。错误处理、单元测试等可能只是因为没有抛出错误而通过。