从C#中检索用户定义表类型的架构

本文关键字:类型 定义 检索 用户 | 更新日期: 2023-09-27 18:29:34

我想知道C#中是否有一种方法可以从SQL数据库实例中检索用户定义表类型的模式。我看到DbConnection类提供了一个GetSchema()方法来获取表模式信息,但我还没能找到一种方法来获取用户定义表类型的模式信息。我感兴趣的是检索类型的名称,以及有关列的信息,如数据类型、可为null、名称等。有人有这样做的经验吗?谢谢

注意:这个问题不是问如何将用户定义的表类型作为参数从C#传递到存储过程

从C#中检索用户定义表类型的架构

不是一个完美的解决方案。但这会奏效的。假设您使用的定义表类型名称为"UDT_Sample"

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

使用SMO。我只是一名DBA,所以Powershell是我的首选工具,但这些概念应该可以立即转移:

import-module sqlps -disablenamechecking;
$s = new-object microsoft.sqlserver.management.smo.server '.';
$db = $s.databases['myDatabase'];
$db.UserDefinedTableTypes | select schema, name;

一旦有了UserDefinedTableType SMO对象,就可以在给定类型上使用Columns方法,该方法将返回Column对象的集合。其中的每一个都将具有列的所有相关信息(名称、类型、可空性等)

使用程序

sp_columns'TableName'

以获取SqlServer中的架构信息。

        using (var connection = CreateConnection())
        {
            connection.Open();
            UserDefinedSchemaTable = connection.GetSchema("StructuredTypeMembers", new string[] { null, null, null,null });
        }