получить заявление SQL за вид - PullRequest
2 голосов
/ 02 декабря 2010

У меня есть приложение c # (2008), которое получает данные с сервера SQL (2005). У меня есть представление в SQL Server, который готовит данные для отображения, что-то вроде этого (упрощенно):

select Places.Name as [Location], Parts.Name as [Part Name]
from  Places inner join Parts 
on Places.Id=Parts.Location

Я должен отфильтровать это с помощью выражения "where", которое встроено в код и имеет вид:

where (Places.Id=1 or Places.Id=15) and 
      (Parts.Id=56 or Parts.Id=8 or Parts.Id=32)

Конечно, я могу сохранить базовый оператор select в своем коде, но мне нравится, что вещи определены только в одном месте :), и вопрос в том, есть ли способ получить оператор select за представлением на сервере sql? Или получить содержимое хранимой процедуры? Большое спасибо!

Ответы [ 3 ]

1 голос
/ 02 декабря 2010

Взгляните на Просмотр информационной схемы , вы можете найти решение.

0 голосов
/ 02 декабря 2010

Если вы хотите, чтобы хранимая процедура выполняла ваш запрос (и объединяла вашу базовую строку запроса с предложением where), это можно сделать с помощью следующего кода:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    string selectCommand = "EXEC sp_YourStoredProcedure @whereClause";

    SqlCommand command = new SqlCommand(selectCommand, connection);
    command.Parameters.Add("@whereClause", System.Data.SqlDbType.NVarChar);
    command.Parameters["@whereClause"] = whereClause;
    using (SqlDataReader reader = command.ExecuteReader())
    {
        while (reader.NextResult())
        {
            string location = reader.GetString(0);
            string partName = reader.GetString(1);

            // do something
        }
    }

    connection.Close();
}

Редактировать: Пример динамической хранимой процедуры:

CREATE PROCEDURE sp_YourStoredProcedure
(
    @whereClause NVARCHAR(MAX)
)
AS
BEGIN
    DECLARE @sql AS NVARCHAR(MAX)

    SET @sql = N'
    select Places.Name as [Location], Parts.Name as [Part Name] 
    from  Places inner join Parts  
    on Places.Id=Parts.Location '
    + @whereClause

     EXEC sp_executesql @sql
END
0 голосов
/ 02 декабря 2010

Использование представлений информационной схемы, как предложил Джани, - один из вариантов.

Другой вариант - использование системной хранимой процедуры sp_helptext.sp_helptext YourView или sp_helptext YourStoredProcedure возвращает вам полное определение объекта.

Более подробную информацию о системной хранимой процедуре sp_helptext можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...