Foxtable(狐表)用户栏目专家坐堂 → 表值函数出错


  共有1921人关注过本帖树形打印复制链接

主题:表值函数出错

帅哥哟,离线,有人找我吗?
happyft
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
表值函数出错  发帖心情 Post By:2017/4/21 14:21:00 [只看该作者]

CREATE FUNCTION dbo.ufn_yw200
(
@whereflt NVARCHAR(MAX), 
@groupcol NVARCHAR(100)
)

RETURNS TABLE 
AS
RETURN 
(
SE LECT 客户,@groupcol,sum(数量) as 数量 from 订单明细 a inner join 订单 b on a.订单编号 = b.订单编号 and @whereflt 
group by 客户,@groupcol
)
GO

建立带参数的表值函数时提示错误
消息 4145,级别 15,状态 1,过程 ufn_yw200,第 9 行
在应使用条件的上下文(在 ')' 附近)中指定了非布尔类型的表达式。
同时有变量的地方也提示不对,要怎么写才正确?

谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/21 14:27:00 [只看该作者]

 不能直接写,你尝试使用exec函数

 

https://www.baidu.com/baidu?wd=EXEC+sqlserver&tn=monline_4_dg&ie=utf-8

 


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/4/22 10:30:00 [只看该作者]

改为储存过程,执行命令没有错误
ALTER PROCEDURE [dbo].[usp_yw200]
(@whereflt NVARCHAR(MAX),@groupcol NVARCHAR(100))
AS
BEGIN
    DECLARE @sql NVARCHAR(MAX);
    SET @sql = 'SE LECT 客户 ,' +@groupcol+ ', sum(数量) as 数量 from 订单明细 a inner join 订单 b on a.订单编号 = b.订单编号' 
    +@whereflt+ 'group by 客户,' +@groupcol;
    EXEC sp_executesql @sql;
END;

但输入值测试总出错: 

DECLARE @return_value int
EXEC @return_value = [dbo].[usp_yw200]
@whereflt = N'订单类别= ''客户订单''',@groupcol = N'制单日期'
SELECT 'Return Value' = @return_value
GO
执行结果是  '订单类别' 附近有语法错误。1行受影响是返回了0 ,但没有返回实际的数据,变量值两端都是用两个单引号,写法也没错,问题出在哪里?


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110624 积分:563022 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/4/22 11:11:00 [只看该作者]

ALTER PROCEDURE [dbo].[usp_yw200]
(@whereflt NVARCHAR(MAX),
@groupcol NVARCHAR(100))
AS
BEGIN
    DECLARE @sql NVARCHAR(MAX);
    SET @sql = 'SELECT 客户 ,' +@groupcol+ ', sum(数量) as 数量 from 订单明细 a inner join 订单 b on a.订单编号 = b.订单编号' 
if @whereflt is not null
begin
SET @sql = @sql+ ' where '+ @whereflt
end
    SET @sql = @sql + ' group by 客户,' +@groupcol;
    --select @sql
    EXEC sp_executesql @sql;
END;

select @sql看拼凑的真正sql是什么就知道问题在哪

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/4/22 12:11:00 [只看该作者]

谢谢老师,按你这样写没有问题,我知道错在哪里了,犯了个低级错误,原来@whereflt里面漏掉了where 这个关键字

 回到顶部