Как получить имя схемы для sysobjects при запросе базы данных сервера sql

1

Мне нужно запросить базу данных для имени и имени схемы для всех хранимых процедур.

Вот что у меня есть, но я не знаю, как получить имя схемы.

Каково имя поля для имени схемы при запросе таблицы sysobjects?

  private DataTable GetProcedures()
    {
        var table = new DataTable();

        string sql = "";

        sql = "select name,'' as type ";
        sql += " From sysobjects ";
        sql += " where type = 'P' ";
        sql += " and name not like 'dt_%'  ";

        sql += " order by name asc";

        using (SqlConnection conn = new SqlConnection(cs))
        {
            conn.Open();

            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = conn;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = sql;

                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {

                    da.Fill(table);
                }
            }
        }
        return table;
    }
Теги:
sql-server-2012

2 ответа

0
Лучший ответ

Может быть, это может вам помочь:

SELECT name AS object_name 
  ,SCHEMA_NAME(schema_id) AS schema_name
  ,type_desc
  ,create_date
  ,modify_date
FROM sys.objects
WHERE type = 'P'
ORDER BY name asc;
1

Используйте таблицу sys.objects соединенную с таблицей sys.schemas следующим образом:

SELECT schemas.name, objects.name
FROM sys.objects
JOIN sys.schemas ON schemas.schema_id = objects.schema_id

поэтому, чтобы найти все хранимые процедуры (принимая ваш запрос как начало), он выглядит так:

SELECT schemas.name, objects.name
FROM sys.objects
JOIN sys.schemas ON schemas.schema_id = objects.schema_id
WHERE type = 'P'
AND objects.name NOT LIKE 'dt_%'

В качестве дополнительной информации вы больше не должны использовать sysobjects поскольку она была заменена на sys.objects, то же самое касается других таблиц sys*.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню