Мне интересно, есть ли способ на С# для получения схемы определенного типа таблицы из экземпляра базы данных SQL. Я вижу, что класс DbConnection
предоставляет метод GetSchema()
для получения информации о схеме таблицы, но мне не удалось выяснить способ получения информации о схеме для определенного типа таблицы. То, что меня интересует, - это имя типа и информация о столбцах, таких как тип данных, значение NULL, имя и т.д. Есть ли у кого-нибудь опыт? Благодарю!
ПРИМЕЧАНИЕ. Этот вопрос НЕ задает вопрос о том, как передать определенный пользователем тип таблицы в качестве параметра хранимой процедуры из С#
Используйте 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 и т.д.),
using (var connection = CreateConnection())
{
connection.Open();
UserDefinedSchemaTable = connection.GetSchema("StructuredTypeMembers", new string[] { null, null, null,null });
}
Не идеальное решение. Но это сработает. Предполагая, что используемое имя определенной таблицы имен типа "UDT_Sample"
DECLARE @UDT UDT_Sample
SELECT * INTO tempUDT FROM @UDT
EXECUTE sp_columns 'tempUDT'
DROP TABLE tempUDT
Использовать процедуру
sp_columns 'TableName'
для получения информации о схеме в SqlServer.