Мне нужно запросить базу данных для имени и имени схемы для всех хранимых процедур.
Вот что у меня есть, но я не знаю, как получить имя схемы.
Каково имя поля для имени схемы при запросе таблицы 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;
}
Может быть, это может вам помочь:
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;
Используйте таблицу 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*
.