VB.NET захватить код хранимой процедуры
Мне интересно, есть ли способ получить код хранимой процедуры из SQL Server 2008 R2?
Например, если у меня был следующий код для создания этой хранимой процедуры:
USE AdventureWorks;
GO
CREATE PROCEDURE HumanResources.uspGetEmployeesTest2
@LastName nvarchar(50),
@FirstName nvarchar(50)
AS
SET NOCOUNT ON;
SELECT FirstName, LastName, Department
FROM HumanResources.vEmployeeDepartmentHistory
WHERE FirstName = @FirstName AND LastName = @LastName
AND EndDate IS NULL;
GO
Есть ли способ, которым я могу написать инструкцию SQL, чтобы получить текст все между 'SET NO COUNT ON' to 'IS NULL'
?
2 ответа
Довольно просто, просто присоединяйтесь к sys.procedures
а также sys.sql_modules
представления системного каталога, чтобы получить определение хранимой процедуры.
Этот код C# иллюстрирует этот подход:
string connectionString = "server=YourServerName;Database=YourDatabaseName;Integrated Security=SSPI;";
string query = @"SELECT m.definition
FROM sys.procedures pr
INNER JOIN sys.schemas s ON pr.schema_id = s.schema_id
INNER JOIN sys.sql_modules m ON pr.object_id = m.object_id
WHERE pr.Name = @Name AND s.Name = @Schema;";
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(query, conn))
{
cmd.Parameters.Add("@Name", SqlDbType.VarChar, 255).Value = "uspGetEmployeesTest2";
cmd.Parameters.Add("@Schema", SqlDbType.VarChar, 255).Value = "HumanResources";
conn.Open();
object returnValue = cmd.ExecuteScalar();
conn.Close();
if (returnValue != null)
{
string procedureDefinition = returnValue.ToString();
}
}
Это возвращает вам все - от CREATE PROCEDURE
до последней строки вашей процедуры
Конечно. Одним из способов является тыкать INFORMATION_SCHEMA.ROUTINES
, В редакторе запросов вы идете так:
SELECT ROUTINE_NAME, ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE
ROUTINE_SCHEMA = 'HumanResources'
AND ROUTINE_NAME = `uspGetEmployeesTest2`
Затем вы можете уточнить текст, который вам нужен, еще больше, поиграв WHERE
а также LIKE
,