You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server架构绑定用户自定义函数能否使用别名类型?

概念澄清
  • 广义的「用户自定义类型(UDT)」包含两类完全不同的类型:
    1. 别名数据类型:就是你通过create type 别名 from 基础类型语法创建的类型,本质是系统内置类型的别名,没有自定义逻辑,sys.types中对应is_assembly_type=0
    2. CLR用户自定义类型:基于.NET程序集实现的自定义类型,支持自定义方法、行为,依赖SQL Server的CLR集成功能,sys.types中对应is_assembly_type=1
      所以「用户自定义类型」和「CLR类型」不是同一概念,CLR类型只是用户自定义类型的一个子集,别名数据类型是用户自定义类型的另一个子集。
报错原因

你遇到的报错属于SQL Server历史遗留的文本表述歧义,报错提示里的「SQL CLR类型」是表述错误,实际指代所有非系统内置的用户自定义类型(包含别名类型),和你有没有开启CLR支持没有关系。

功能限制说明

目前所有主流SQL Server版本(包括2017、2022)均不支持在架构绑定的对象(架构绑定函数、视图、约束表达式)中使用别名数据类型,两个功能无法同时启用。

可选折中方案
  • 优先保留架构绑定的性能收益:放弃使用别名类型,所有用到该类型的位置直接声明decimal(8,3),可以通过代码规范、全局替换的方式保证所有位置的类型统一,改造成本很低。
  • 优先保留别名类型的统一管理能力:去掉函数定义中的WITH SCHEMABINDING参数,需要提前评估去掉架构绑定带来的性能损失是否符合业务要求。

内容的提问来源于stack exchange,提问作者Kevin Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:03:04