Получить схему пользовательского типа таблицы из C #

1

Мне интересно, есть ли способ на С# для получения схемы определенного типа таблицы из экземпляра базы данных SQL. Я вижу, что класс DbConnection предоставляет метод GetSchema() для получения информации о схеме таблицы, но мне не удалось выяснить способ получения информации о схеме для определенного типа таблицы. То, что меня интересует, - это имя типа и информация о столбцах, таких как тип данных, значение NULL, имя и т.д. Есть ли у кого-нибудь опыт? Благодарю!

ПРИМЕЧАНИЕ. Этот вопрос НЕ задает вопрос о том, как передать определенный пользователем тип таблицы в качестве параметра хранимой процедуры из С#

Теги:
sql-server
schema

4 ответа

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

Используйте SMO. Я просто администратор базы данных, поэтому Powershell - это мой инструмент выбора, но концепции должны быть немедленно переданы:

import-module sqlps -disablenamechecking;
$s = new-object microsoft.sqlserver.management.smo.server '.';
$db = $s.databases['myDatabase'];

$db.UserDefinedTableTypes | select schema, name;

Когда у вас есть объект SMO UserDefinedTableType, вы можете использовать метод Columns для заданного типа, который будет возвращать коллекцию объектов Column. Каждая из них будет иметь всю необходимую информацию для столбцов (имя, тип, значение nullability и т.д.),

  • 0
    Интересно. Я думаю, что этот Powershell использует некоторые библиотеки .NET изнутри, поэтому, возможно, я могу попытаться обратиться к этой библиотеке и посмотреть, что она предлагает. Я дам вам знать, как это происходит.
  • 0
    Абсолютно так и есть. Пространство имен SMO (на которое указывает строка нового объекта).
Показать ещё 4 комментария
0
        using (var connection = CreateConnection())
        {
            connection.Open();
            UserDefinedSchemaTable = connection.GetSchema("StructuredTypeMembers", new string[] { null, null, null,null });
        }
  • 1
    Не могли бы вы объяснить, что происходит в вашем коде? это может быть очевидно для вас и других опытных программистов, но когда вы добавляете какое-то объяснение, это делает ответ намного лучше и в конечном итоге приводит к большему количеству отрицательных отзывов.
0

Не идеальное решение. Но это сработает. Предполагая, что используемое имя определенной таблицы имен типа "UDT_Sample"

DECLARE @UDT UDT_Sample
SELECT * INTO tempUDT FROM @UDT
EXECUTE sp_columns 'tempUDT'
DROP TABLE tempUDT
0

Использовать процедуру

sp_columns 'TableName'

для получения информации о схеме в SqlServer.

  • 1
    Я знаю, как получить информацию о схеме через SQL, но мне было любопытно, был ли способ получить схему из C # (без вызова C # хранимой процедуры). Например, я знаю, что база данных Entity Framework вначале может получить много информации о схеме из базы данных без необходимости вызова хранимой процедуры.

Ещё вопросы

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