Я пытаюсь создать хранимую процедуру, и я получаю эту ошибку:
Сообщение 208, уровень 16, состояние 6, процедура SP_MergeStagedPoliticalPartyAgents, строка 1 [строка запуска пакета 0]
Недопустимое имя объекта «SP_MergeStagedPoliticalPartyAgents».
SQL выглядит следующим образом, минус содержание
CREATE OR ALTER PROCEDURE SP_MergeStagedPoliticalPartyAgents
AS
BEGIN
-- Content removed for brevity
END
Если я каким-либо образом изменю имя, то есть добавлю лишний s или удалю s в конце. Он работает на 100% нормально, поэтому мой вопрос в том, что именно с этим конкретным именем, которое я использую, вызывает его сбой?
Есть ли в SQL Server регулярное выражение проверки имени, которое нарушает это имя? Это зарезервированное имя?
Более странное дополнение IMO: ради тестирования, если я пойду:
CREATE PROCEDURE SP_MergeStagedPoliticalPartyAgents
AS
BEGIN
-- Content removed for brevity
END
Он работает нормально и создает хранимую процедуру поверх этого, после чего оператор CREATE OR ALTER PROCEDURE SP_MergeStagedPoliticalPartyAgents
работает нормально.
Кажется, что если хранимая процедура с таким именем не существует, она потерпит неудачу на CREATE OR ALTER PROCEDURE SP_MergeStagedPoliticalPartyAgents
, но пройдет на CREATE SP_MergeStagedPoliticalPartyAgents
, если она инициализируется в первый раз.
Примечание:
- У меня уже есть другие хранимые процедуры, созданные таким же образом, которые в порядке
- Это не проблема с разрешениями, так как я могу создавать хранимые процедуры.
- Запуск скрипта через VS вызывает ту же проблему, поэтому он не связан с SMSS.
- Это также не содержание. Если я заменю содержимое базовым
select * from table
, проблема все равно останется.
sp_
для своих хранимых процедур. Microsoft зарезервировала этот префикс для собственного использования ( см. Именование хранимых процедур), и вы рискуете столкнуться с конфликтом имен в будущем. Это также плохо сказывается на производительности ваших хранимых процедур. Лучше просто избегатьsp_
и использовать в качестве префикса что-то другое - или вообще не использовать префикс! - person marc_s   schedule 19.03.2021