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

SQL Server 2019动态数据掩码default()函数运行异常问题咨询

操作问题说明

你操作中存在两处错误:

  • 副本表创建逻辑错误:你执行的SELECT INTO语句的源表写为了还未创建的[Person].[PersonMasked],如果是首次执行该语句,会直接报对象不存在错误,正确的源表应为原生的[AdventureWorks2014].[Person].[Person]。
  • 加掩码语句错误修改字段长度,这是触发8152报错的直接原因:原Person.Person表的FirstName字段定义为NVARCHAR(50),你在执行ALTER COLUMN添加掩码时手动指定了NVARCHAR(10),当表中存在长度超过10个字符的FirstName值时,就会触发字符串截断错误。

正确的添加掩码语句无需修改原有字段的类型和长度,写法如下:

ALTER TABLE [AdventureWorks2014].[Person].[PersonMasked]
ALTER COLUMN FirstName ADD MASKED WITH (FUNCTION = 'default()');

SSMS查看掩码函数的方法

SQL Server动态数据掩码用到的default()等函数为系统内置功能,不属于用户定义函数,无法在SSMS的「可编程性-函数」目录中直接查看源码,你可以通过以下两种方式查看已配置的掩码规则:

  • 可视化查看:在SSMS中右键点击Person.PersonMasked表,选择「设计」,选中FirstName列后,在下方的「列属性」面板中找到「动态数据掩码」选项,即可看到当前绑定的掩码函数。
  • 系统视图查询:执行以下语句即可查询指定表的所有掩码配置:
SELECT 
    SCHEMA_NAME(t.schema_id) AS 架构名,
    t.name AS 表名,
    c.name AS 列名,
    c.masking_function AS 掩码函数
FROM 
    sys.masked_columns c
INNER JOIN 
    sys.tables t ON c.object_id = t.object_id
WHERE 
    t.name = 'PersonMasked' 
    AND SCHEMA_NAME(t.schema_id) = 'Person';

内容的提问来源于stack exchange,提问作者Francesco Mantovani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:06:04