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,

Другие вопросы по тегам