#sql #sql-server-2008
#sql #sql-server-2008
Вопрос:
Я новичок в Windows servers, и у меня есть, надеюсь, быстрый вопрос. Я ищу хранимую процедуру в SQL Server 2008 Management Studio. Я запустил этот запрос,
SELECT name, type
FROM dbo.sysobjects
WHERE (type = 'P')
Который возвращает список хранимых процедур. Тот, кого я ищу, есть в списке. Теперь мне нужно знать, как и где это найти. Я просматриваю структуру с левой стороны и вижу несколько папок «Хранимых процедур», но я не вижу элемента, который я ищу, ни в одном из списков. Есть ли SQL, чтобы показать мне хранимую процедуру, или мне нужно открыть ее в SQL Server Management Studio? Может ли это также быть проблемой с разрешениями у пользователя, с которым я подключаюсь?
Спасибо за любую помощь в этом.
Комментарии:
1. Под базами данных у меня есть только системные базы данных и моментальные снимки базы данных, я не вижу свою фактическую базу данных.. Именно там, где я думал, будет хранимая процедура. Спасибо.
Ответ №1:
Вы всегда можете просмотреть содержимое хранимой процедуры с помощью sp_helptext:
sp_helptext 'mystoredprocname'
Вы также можете найти хранимые процедуры с помощью
1) Выбор вашей базы данных и ее расширение
2) Расширение узла программируемости
3) Расширение узла хранимых процедур
4) Поиск по списку хранимых процедур до тех пор, пока вы не найдете ту, которую ищете
Комментарии:
1. Потрясающе, это так помогло. Теперь я могу видеть процедуру, каков наилучший способ обновить эти хранимые процедуры. Нужно ли мне иметь возможность видеть их под узлом программируемости, потому что я их там не вижу, но я могу запустить sp_helptext и другой запрос, чтобы увидеть его.
2. Самый простой способ — перейти к хранимой процедуре в левой навигации, щелкнуть по ней правой кнопкой мыши и выбрать Изменить. В окне запроса будет сгенерирован сценарий изменения процедуры, который затем можно изменить. Когда вы закончите с вашими изменениями, вы можете нажать кнопку Выполнить, чтобы изменить содержимое хранимой процедуры в базе данных.
Ответ №2:
Это звучит как проблема с разрешениями. Возвращает ли это что-нибудь для вас?
use YourDatabaseName;
GO
sp_helptext 'YourSchemaName.YourProcedureName';
Комментарии:
1. Да, sp_helptext возвращает мне информацию, он возвращает процедуру. Однако я не могу найти ее в процедурах хранения, и мне нужно ее отредактировать. Любая помощь приветствуется.
2. @SkylerCain Измените «ПРОЦЕДУРУ СОЗДАНИЯ», которая была возвращена, на «ПРОЦЕДУРУ ИЗМЕНЕНИЯ» и внесите свои изменения.
3. Ты мой герой дня, Джо. Спасибо.
Ответ №3:
Я считаю, что запрос для этого:
select *
from yourDB.information_schema.routines
where routine_type = 'PROCEDURE'
Однако, если вы не видите свою базу данных, более вероятно, что у пользователя, которого вы используете, нет доступа.
Комментарии:
1. Если вы публикуете образцы кода, XML или данных, ПОЖАЛУЙСТА , выделите эти строки в текстовом редакторе и нажмите на кнопку «образцы кода» (
{ }
) на панели инструментов редактора, чтобы красиво оформить и выделить синтаксис!
Ответ №4:
Я использую это очень удобное расширение, которое позволяет вам искать и быстро находить SQL в SQL Server Management Studio. Вы можете быстро искать текст SQL в хранимых процедурах, функциях, представлениях и т. Д. Что касается моего написания, это бесплатный инструмент, посмотрите и узнайте о нем больше: http://www.red-gate.com/products/sql-development/sql-search /
Ответ №5:
Мы часто следуем синтаксису:
create procedure procedureName
.........
Если вы сделали это, ваша хранимая процедура будет создана в соответствии со схемой dbo вашей базы данных, в которой вы выполнили сценарий создания процедуры.
Теперь на всякий случай, если вы хотите переместить свой SP в нужную схему, вам нужно изменить свой SP
alter procedure [schemaName].[USP_SP]
Ответ №6:
У меня есть сценарий для этого. вот оно:
--=====================================================================================
-- looking at all databases to find a stored procedure named @spName
-- marcelo miorelli
-- 1-april-2014
--=====================================================================================
DECLARE @SQL NVARCHAR(max)
,@spName VARCHAR(100) = 'usp_sel_CAEval4_comments' -- THE PROCEDURE THAT I AM LOOKING FOR
SELECT @SQL = STUFF((
SELECT CHAR(10) ' UNION ALL ' CHAR(10)
' SELECT ' quotename(NAME, '''') ' AS DB_NAME ' CHAR(10)
' , SCHEMA_NAME(s.schema_id) AS THE_SCHEMA ' CHAR(10)
' , s.name COLLATE Latin1_General_CI_AS AS THE_NAME ' CHAR(10)
' FROM ' quotename(NAME) '.sys.procedures s ' CHAR(10)
' WHERE s.name = @spName
AND s.[type] = ''P'''
FROM sys.databases
ORDER BY NAME
FOR XML PATH('')
,TYPE
).value('.', 'nvarchar(max)'), 1, 11, '')
--PRINT @SQL
EXECUTE sp_executeSQL @SQL
,N'@spName varchar(100)'
,@spName