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