Хранимая процедура не отображает код в базе данных

#sql #sql-server #stored-procedures

#sql #sql-сервер #хранимые процедуры

Вопрос:

У меня странная проблема. Я создал хранимую процедуру и успешно выполнил ее.

Но когда я пытаюсь найти его в базе данных, он не показывает код внутри процедуры. Я имею в виду, что если я щелкну правой кнопкой мыши и скажу изменить, чтобы увидеть код моей процедуры, он покажет только следующий код :

 set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE Proc_Name
  

Почему она не отображает полный код? Я удалил процедуру из базы данных и снова выполнил, затем она говорит «В базе данных уже есть объект с именем ‘Proc_Name'». и он показывает тот же код.

Комментарии:

1. Каким должно быть определение (следующие несколько строк)

2. Вы уверены, что смотрите на правильную базу данных? Вы создаете sproc в одной базе данных, но просматриваете в другой?

3. Привет @ Oded, Да, я создаю proc в правильной базе данных, и я ищу в правильной базе данных. Привет @Martin, я не получил твоего вопроса. вы говорите о коде?

4. @Программист — Да. Как выглядит полный заголовок хранимой процедуры после того, как текст будет усечен? Например, есть проблема с вложенными комментариями — Не уверен, приведет ли это к тому же поведению, которое вы получаете.

5. Привет @Martin, я понял. я просто поставил ALTER PROC и выполнил его снова. теперь я могу видеть свою процедуру в базе данных. Тем не менее, спасибо за вашу помощь.

Ответ №1:

Если при нажатии правой кнопкой мыши — Изменить текст хранимой процедуры не отображается, попробуйте выполнить следующее:

 SELECT text 
FROM syscomments 
WHERE id = (SELECT id FROM sysobjects WHERE name = 'proc_name') 
  

Замените proc_name на имя соответствующей хранимой процедуры.

Если это сработает, я бы подумал о его повторном создании с использованием стандартного шаблона, подобного тому, который вы получаете, когда щелкаете правой кнопкой мыши по хранимым процедурам — Новая хранимая процедура и очищаете любое нечетное форматирование.

Комментарии:

1. при каких обстоятельствах системные комментарии содержали бы данные, но SSMS не отображала бы их? Наверняка SSMS использует syscomments внутренне?

2. Я думал, что SSMS может получать текст из syscomments, затем выполнять форматирование над ним, чтобы он выглядел красиво, и при форматировании каким-то образом текст может быть усечен или иным образом сделан нечитаемым.

3. @Martin исправил его проблему, так что, я думаю, мы никогда не узнаем 🙂

4. @gemCer да, ваш ответ полезен для извлечения текста для процедуры ….. я узнаю что-то новое, спасибо

Ответ №2:

   use <Database name>
    go
    sp_helptext <procname>
  

или же найдите процедуру

 select * from sys.objects where name like '%<Procedure_name>%' and type='P'
  

Ответ №3:

возможно, процедура была создана с тегом «С ШИФРОВАНИЕМ», чтобы намеренно скрыть код. Другая возможность заключается в том, что кто-то другой является владельцем объекта, и у вас нет разрешения на доступ к его коду.