在Azure Synapse Studio中无法创建用户自定义函数问题求助
报错原因说明
语法错误「Create Function is Incorrect token」
该语法提示错误由两类原因导致:
- Synapse 不同类型的SQL池对函数的支持范围不同:无服务器SQL池仅支持内联表值函数,不支持标量函数、多语句表值函数,如果你编写的是后者就会触发语法报错;部分旧版本Synapse Studio的静态语法校验规则和Synapse SQL实际支持的语法存在偏差,也会出现误报的情况。
- 编辑器选择的数据库上下文存在缓存问题,即使顶部选择了自定义数据库,实际查询上下文可能仍未切换到对应库。
权限报错「Create Function permission denied in database」
当前操作使用的账号缺少对应数据库的CREATE FUNCTION权限,如果创建的是绑定到架构的函数,还需要对应Schema的ALTER权限。
正确创建函数操作步骤
步骤1:确认SQL池类型,编写对应语法的函数
无服务器SQL池(仅支持内联表值函数)
-- 先手动切换到目标数据库,不要依赖编辑器顶部选择 USE 你的自定义数据库名称; GO CREATE FUNCTION dbo.自定义函数名 (@参数名 参数类型) RETURNS TABLE AS RETURN ( -- 这里填写你的查询逻辑 SELECT 列名 FROM 表名 WHERE 筛选条件 = @参数名 ); GO
专用SQL池(支持标量函数、内联表值函数)
标量函数示例:
USE 你的自定义数据库名称; GO CREATE FUNCTION dbo.自定义函数名 (@参数名 参数类型) RETURNS 返回值类型 AS BEGIN -- 这里填写计算逻辑 RETURN 计算结果; END; GO
步骤2:配置对应权限
使用数据库管理员账号执行以下授权语句,给操作账号开通对应权限:
USE 你的自定义数据库名称; GO -- 授予创建函数权限 GRANT CREATE FUNCTION TO [你的操作账号]; -- 授予对应Schema的修改权限,用于绑定架构的函数创建 GRANT ALTER ON SCHEMA::dbo TO [你的操作账号]; GO
补充注意事项
如果编辑器仍提示语法错误,可以忽略静态校验直接执行语句,Synapse Studio的前端校验规则经常滞后于后端实际支持的语法规则。
内容的提问来源于stack exchange,提问作者aparajita singh
相关产品推荐
相关产品推荐

