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

编写返回数值列列表的SQL表值函数时遇报错:Expecting EXTERNAL near 'begin'

问题解决:SQL表值函数begin处报错Expecting EXTERNAL near 'begin'

错误原因

  • 语法格式错误:你混淆了表值函数的两种写法逻辑。内联表值函数不需要begin/end包裹,直接通过return返回查询结果;如果写多语句表值函数,必须先定义表变量存储结果再返回。
  • 参数引用错误:where TABLE_NAME = table_name里的table_name未引用传入的参数,要写成@table_name才会调用你传入的表名参数。
  • 数据类型不匹配:不同数据库的数值类型命名有差异,比如SQL Server没有NUMBER类型,对应是numeric/decimal;DOUBLE对应float。如果是Snowflake这类数据库,表值函数语法要求更严格,需要用特定格式声明。

修正后的代码(分数据库场景)

场景1:SQL Server(内联表值函数,性能更优)

go
create function get_num_col(@table_name varchar(255))
returns table 
as
return (
   select column_name
   from INFORMATION_SCHEMA.columns
   where TABLE_NAME = @table_name
       and data_type in ('int', 'numeric', 'decimal', 'float', 'real')
)

场景2:SQL Server(多语句表值函数)

go
create function get_num_col(@table_name varchar(255))
returns @result table ( column_name varchar(255) )
as
begin
   insert into @result
   select column_name
   from INFORMATION_SCHEMA.columns
   where TABLE_NAME = @table_name
       and data_type in ('int', 'numeric', 'decimal', 'float', 'real')
   return
end

场景3:Snowflake数据库适配

create or replace function get_num_col(table_name varchar)
returns table (column_name varchar)
as
$$
select column_name
from INFORMATION_SCHEMA.columns
where TABLE_NAME = table_name
    and data_type in ('NUMBER', 'FLOAT', 'DOUBLE')
$$;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:26:16