当前位置: 首页 > article >正文

SqlServer自定义类型的使用

目录

      • 前言
      • 分类
        • 基于标量类型
          • 新建
          • 查询语句
        • 用户定义的表类型
          • 新建
          • 查询语句
        • 基于 CLR
          • 新建
          • 查询语句

前言

最近接触了SqlServer的自定义类型–TYPE,在此记录一下所得

分类

在 SQL Server 中,用户定义的类型(User-Defined Types, UDT)是一种扩展 SQL Server 内置数据类型的功能,允许开发者创建自己的复杂数据类型。用户定义的类型可以基于标量类型(如 int、varchar 等)或者用户定义的类型(table types),还可以基于** CLR**(Common Language Runtime),这类类型是通过 .NET Framework 编写的类来定义的。

基于标量类型

这种是最简单的,可以理解为将SqlServer支持的基本类型约束一下范围,取个别名。

新建
CREATE TYPE [ schema_name. ] type_name
{
      FROM base_type
      [ ( precision [ , scale ] ) ]
      [ NULL | NOT NULL ]
      
} [ ; ]

查询语句
SELECT
	t.name  [类型名],
	tt.name  [源类型],
	t.max_length,
	t.precision,
	t.scale,
	t.is_nullable ,
	SUSER_SNAME( u.sid ) [类型所有者],
	s.name  [所处架构]
FROM
	sys.types t
	JOIN sys.types tt ON t.system_type_id = tt.user_type_id
	JOIN sys.schemas s ON s.schema_id = t.schema_id 
	JOIN sys.sysusers u ON s.principal_id = u.uid 
WHERE
	t.is_user_defined = 1 
	AND t.is_table_type = 0 
	AND t.is_assembly_type = 0;
用户定义的表类型
新建
CREATE TYPE [ schema_name. ] type_name
AS TABLE ( { <column_definition> [ , ...n ] }
    | [ <table_constraint> ] [ , ...n ]
    | [ <table_index> ] [ , ...n ] )
    [ WITH ( <table_option> [ , ...n ] ) ]
 [ ; ]
查询语句
SELECT
	t.name [自定义类型名],
	s.name [所处架构],
	c.name [列名],
	y.name [列类型],
	SUSER_SNAME( u.sid ) [所有者],
	c.max_length,
	c.precision,
	c.scale,
	c.is_identity,
	c.is_nullable 
FROM
	sys.table_types t
	INNER JOIN sys.columns c ON c.object_id = t.type_table_object_id
	INNER JOIN sys.types y ON y.user_type_id = c.user_type_id
	INNER JOIN sys.schemas s ON s.schema_id = t.schema_id
	LEFT JOIN sys.sysusers u ON s.principal_id = u.uid 
WHERE
	t.is_user_defined = 1 
	AND t.is_table_type = 1
基于 CLR

该类型引用注册的 assembly 中定义的类型,新建反而比较简单。

新建
CREATE TYPE [ schema_name. ] type_name
{
      FROM  EXTERNAL NAME assembly_name [ .class_name ]
} [ ; ]
查询语句
-- 查询所有基于 CLR 的用户定义类型
SELECT
	t.name [自定义类型名],
	a.name  [assembly类型名] ,
	s.name [所处架构],
	SUSER_SNAME( u.sid ) [所有者]
FROM
	sys.types t
	JOIN sys.assemblies a ON t.principal_id = a.assembly_id 
	JOIN sys.schemas s ON s.schema_id = t.schema_id
	JOIN sys.sysusers u ON s.principal_id = u.uid 
WHERE
	t.is_user_defined = 1 
	AND t.is_assembly_type = 1;

http://www.kler.cn/a/311081.html

相关文章:

  • Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)
  • 使用Python实现定期从API获取数据并存储到数据库的完整指南
  • react动态路由
  • 使用 Sparkle 实现 macOS 应用自定义更新弹窗
  • 【juc】AbstractQueuedSynchronized为什么采用双向链表
  • 软件测试——认识测试
  • 【数据结构-一维差分】力扣1893. 检查是否区域内所有整数都被覆盖
  • 无人机滑环的核心特点及其应用分析
  • [论文笔记] LLM端侧小模型篇——1、剪枝量化的latency
  • MySQl篇(基本介绍)(持续更新迭代)
  • Leetcode—删除有序数组的重复项
  • 408算法题leetcode--第七天
  • Llama 3.1 大模型指令微调提升中文能力
  • 【系统架构设计师-2019年真题】案例分析-答案及详解
  • Scikit-learn 学习笔记
  • 尚品汇-秒杀商品存入缓存、Redis发布订阅实现状态位(五十一)
  • 全球首个!复旦大学冯建峰团队开发数字孪生脑平台,具备 860 亿神经元规模
  • 旷视轻量化网络shufflenet算法解读
  • MySQL——数据库的高级操作(二)用户管理(3)删除普通用户
  • 机器学习1--概述
  • Linux创建虚拟磁盘并分区格式化
  • 「Netmarble 小镇」活动来了:踏上穿越标志性世界的旅程!
  • OpenHarmony鸿蒙( Beta5.0)智能门铃开发实践
  • Unity-Transform-坐标转换
  • k8s环境下的相关操作
  • (SERIES12)DM性能优化