函数的小问题

cy527300280 2008-11-18 06:54:08
create function 先修课(@s int)
returns table
as
begin
return (select 学生表.学号,姓名,先修课 from 学生表,成绩表,课程表
where 学生表.学号=成绩表.学号 and 成绩表.课程号=课程表.课程号 and 学号=@s )
end

报错:
服务器: 消息 170,级别 15,状态 31,过程 先修课,行 7
第 7 行: 'BEGIN' 附近有语法错误。


请问是什么原因,如果把begin和end去掉,它也报错:
服务器: 消息 209,级别 16,状态 1,过程 先修课,行 5
列名 '学号' 不明确。


问题:1、为什么加begin end就报错?
2、学号为什么不能是变量?

谢谢大家了,请帮我解答……
...全文
68 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cy527300280 2008-11-18
  • 打赏
  • 举报
回复
知道了,再次谢谢大家
mathsfan 2008-11-18
  • 打赏
  • 举报
回复
ls厉害...
liangCK 2008-11-18
  • 打赏
  • 举报
回复
这是语法问题..

T-SQL联机丛书查CREATE FUNCTION

当创建内联表值函数时,不用加BEGIN..END,而直接RETURN
如:
CREATE FUNCTION fn_name
RETURNS TABLE
AS
RETURN(
sql_query;
)

当创建多语句的表值函数时,需要加BEGIN..END.
如:
CREATE FUNCTION fn_name
RETURN @t TABLE(col1 col1_type,col2 col2_type)
AS
BEGIN
INSERT INTO @t
SELECT col1,col2
FROM tb_name

RETURN
END

创建标量函数就不用说了..
nalnait 2008-11-18
  • 打赏
  • 举报
回复
create function 先修课(@s int)
returns table
as
return select 学生表.学号,姓名,先修课 from 学生表,成绩表,课程表
where 学生表.学号=成绩表.学号 and 成绩表.课程号=课程表.课程号 and 学号=@s
cy527300280 2008-11-18
  • 打赏
  • 举报
回复
不行啊,还是begin报错,去掉就declare报错
ws_hgo 2008-11-18
  • 打赏
  • 举报
回复
create function 先修课(@s int)
returns table
as
begin
declare @i nvarchar(2000)
set @i=(select 学生表.学号,姓名,先修课 from 学生表,成绩表,课程表
where 学生表.学号=成绩表.学号 and 成绩表.课程号=课程表.课程号 and 学号=@s )
return @i
end

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧