SQL Server:奇怪的无效对象名称

Hei*_*ich 2 sql sql-server-2019

我正在尝试创建一个存储过程,但收到此错误:

消息 208,级别 16,状态 6,过程 SP_MergeStaggedPoliticalPartyAgents,第 1 行 [批处理开始第 0 行]
对象名称“SP_MergeStaggedPoliticalPartyAgents”无效。

SQL如下,减去内容

CREATE OR ALTER PROCEDURE SP_MergeStagedPoliticalPartyAgents
AS
BEGIN
    -- Content removed for brevity
END
Run Code Online (Sandbox Code Playgroud)

如果我无论如何改变名称,即添加额外的 s,或删除末尾的 s。它工作 100% 正常,所以我的问题是我使用的这个特定名称是什么导致它失败?

SQL Server 是否有该名称违反的名称验证正则表达式?这是一个保留名称吗?

IMO 更奇怪的补充:为了测试我是否去:

CREATE PROCEDURE SP_MergeStagedPoliticalPartyAgents
AS
BEGIN
    -- Content removed for brevity
END
Run Code Online (Sandbox Code Playgroud)

它运行良好并在此基础上创建存储过程,从那时起该CREATE OR ALTER PROCEDURE SP_MergeStagedPoliticalPartyAgents语句就可以正常工作。

似乎不存在具有此名称的存储过程,它将失败,但如果第一次初始化它,则会CREATE OR ALTER PROCEDURE SP_MergeStagedPoliticalPartyAgents传递。CREATE SP_MergeStagedPoliticalPartyAgents

笔记:

  • 我已经以相同的方式创建了其他存储过程,这些存储过程都很好
  • 这不是权限问题,因为我可以很好地创建存储过程。
  • 通过 VS 运行脚本会导致相同的问题,因此它与 SMSS 无关
  • 这也不是内容。如果我用基本内容替换内容,select * from table问题仍然存在。

小智 6

就在我发布问题后,我找到了解决方案。

\n

https://bornsql.ca/blog/remember-this-if-you-want-to-use-sp_/

\n

创建或更改

\n

您可以使用 CREATE PROCEDURE 在主数据库和您拥有的任何用户数据库中非常轻松地创建带有前缀的存储过程。然而,Erik 展示的是,如果您在 master 数据库中已有一个名称带有 sp_ 前缀的存储过程,然后使用 CREATE OR ALTER 语法在用户数据库中创建具有相同名称的存储过程,您\xe2 \x80\x99ll 在用户数据库中收到 \xe2\x80\x9cInvalid object name\xe2\x80\x9d 错误: *

\n

我发现有人也在主数据库中创建了这些存储过程。

\n