以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 表值函数出错 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=99564) |
-- 作者:happyft -- 发布时间: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 行 在应使用条件的上下文(在 \')\' 附近)中指定了非布尔类型的表达式。 同时有变量的地方也提示不对,要怎么写才正确? 谢谢!
|
-- 作者:有点色 -- 发布时间:2017/4/21 14:27:00 -- 不能直接写,你尝试使用exec函数
https://www.baidu.com/baidu?wd=EXEC+sqlserver&tn=monline_4_dg&ie=utf-8
|
-- 作者:HappyFt -- 发布时间: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 ,但没有返回实际的数据,变量值两端都是用两个单引号,写法也没错,问题出在哪里? |
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2017/4/22 12:11:00 -- 谢谢老师,按你这样写没有问题,我知道错在哪里了,犯了个低级错误,原来@whereflt里面漏掉了where 这个关键字
|