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

自定义存储过程udfWeek无法返回星期几结果的技术咨询

问题分析与解决方案

嘿,我一眼就瞅出你代码里的几个小问题啦,这就是为啥执行后没返回结果的原因:

核心问题点

  • 你混淆了**存储过程(Procedure)和用户定义函数(UDF)**的用法:你用alter procedure定义的是存储过程,但却用调用函数的方式select dbo.udfWeek(...)来执行,这根本不匹配。
  • 存储过程里的print语句只会在SQL Server的消息窗口输出内容,不会作为查询结果集返回,所以你在结果标签页看不到东西。

修正方案:改成标量值函数

如果想要实现可以用select调用并返回结果的功能,咱们应该定义成标量值用户定义函数,代码如下:

方案1:返回星期对应的数字

-- 创建(或修改)标量函数,返回星期数字(注意:数字对应的星期几取决于你的服务器语言设置)
CREATE OR ALTER FUNCTION udfWeek(@days datetime)
RETURNS int
AS
BEGIN
    RETURN DATEPART(weekday, @days)
END
GO

-- 调用函数,此时会正常返回结果集
SELECT dbo.udfWeek('2011-11-11') AS 星期数字

方案2:返回具体的星期名称

如果想要直接返回“星期一”“星期五”这类名称,可以用DATENAME代替DATEPART:

CREATE OR ALTER FUNCTION udfWeek(@days datetime)
RETURNS nvarchar(20)
AS
BEGIN
    RETURN DATENAME(weekday, @days)
END
GO

-- 调用示例
SELECT dbo.udfWeek('2011-11-11') AS 星期名称

补充:如果坚持用存储过程

要是你就想用存储过程实现,那得用正确的调用方式,并且可以通过输出参数或者结果集返回内容:

ALTER PROCEDURE procWeek(@days datetime)
AS
BEGIN
    -- 直接返回结果集,而不是用print
    SELECT DATEPART(weekday, @days) AS 星期数字
END
GO

-- 调用存储过程的正确方式
EXEC dbo.procWeek '2011-11-11'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:11:28