一个sql自订函数返回一个表,单独运行正常,联合时报错,什么原因?

lhb2000 2005-09-13 11:43:53
select * from dbo.getclyb('WXY-A','水电','2005-9-1','2005-8-31',1 )
这样做运行正常 如果根据编码取名称 下面这样用 就报错
select a.*,b.GCMC from dbo.getclyb('WXY-A','水电','2005-9-1','2005-8-31',1 ) a left join GC b on a.DXGCBH=b.GCBH
报错如下:
无法解决 equal to 操作的排序规则冲突。
这是什么原因?
自订函数内容为
--取材料月报
CREATE FUNCTION getclyb (@dxgcbh varchar(10),@lbmc varchar(20),@sj datetime,@sj1 datetime,@isjg smallint)
RETURNS @ybb TABLE (DXGCBH varchar(10) not null, --单项工程
LBMC varchar(20) NOT NULL, --材料类别
LLDW varchar(50), --领料单位
CLMC varchar(40), --材料名称
GGXH varchar(50), --规格型号
DW varchar(10),--单位
BDSL float,--标底数量
SYSL float, --上月累计供应数量
BYSL float, --本月进库数量
BYJE float,--本月进库金额
BYLYSL float , --本月领用量
BYLYJE float, --本月领用金额
BYXJSL float, --本月小计数量
BYXJJE float, --本月小计金额
ZJE float --总金额
)
AS
BEGIN
DECLARE @tabs TABLE (DXGCBH varchar(10) not null,
LBMC varchar(20) NOT NULL,
LLDW varchar(50), --领料单位
CLMC varchar(40),
GGXH varchar(50), --规格型号
DW varchar(10),--单位
BDSL float,--标底数量
SYSL float, --上月累计供应数量
BYSL float, --本月进库数量
BYJE float,--本月进库金额
BYLYSL float , --本月领用量
BYLYJE float, --本月领用金额
BYXJSL float, --本月小计数量
BYXJJE float, --本月小计金额
ZJE float --总金额
)
declare @bdsl float,@dw varchar(10),@tmpclmc varchar(40),@tmpggxh varchar(50),@tmpsl float,@sysl float,@bysl float,@byje float,@bylysl float,@bylyje float,@lldw varchar(50)
DECLARE jhd_cursor CURSOR FOR SELECT JHD.CLMC,JHD.GGXH,sum(JHD.CGSL) as CGSL ,JHD.DW,sum(JHD.BDSL) as BDSL FROM JHD_BT inner join JHD on JHD_BT.BH=JHD.BH
where JHD_BT.DXGCBH=@dxgcbh and JHD_BT.LBMC=@lbmc group by JHD.CLMC,JHD.GGXH,JHD.DW
OPEN jhd_cursor
FETCH NEXT FROM jhd_cursor into @tmpclmc,@tmpggxh,@tmpsl,@dw,@bdsl
WHILE @@FETCH_STATUS = 0
BEGIN
set @sysl=dbo.getsysl(@dxgcbh,@lbmc,@tmpclmc,@tmpggxh,@sj1,@isjg) --上月数量
set @bysl=dbo.getbysl(@dxgcbh,@lbmc,@tmpclmc,@tmpggxh,@sj,@isjg) --本月已供数量
set @byje=dbo.getbyje(@dxgcbh,@lbmc,@tmpclmc,@tmpggxh,@sj,@isjg) --本月已供金额
set @bylysl=dbo.getbyllsl(@dxgcbh,@lbmc,@tmpclmc,@tmpggxh,@sj,@isjg) --本月已领数量
set @bylyje=dbo.getbyllje(@dxgcbh,@lbmc,@tmpclmc,@tmpggxh,@sj,@isjg) --本月已领金额
set @lldw=dbo.getlldw(@dxgcbh,@isjg) --领料单位
insert into @tabs (DXGCBH,LBMC,LLDW,CLMC,GGXH,DW,BDSL,SYSL,BYSL,BYJE,BYLYSL,BYLYJE,BYXJSL,BYXJJE,ZJE) values (@dxgcbh,@lbmc,@lldw,@tmpclmc,@tmpggxh,
@dw,@bdsl,@sysl,@bysl,@byje,@bylysl,@bylyje,@bylysl,@bylyje,@bylyje)
FETCH NEXT FROM jhd_cursor into @tmpclmc,@tmpggxh,@tmpsl,@dw,@bdsl
END
CLOSE jhd_cursor
DEALLOCATE jhd_cursor
insert into @ybb select DXGCBH,LBMC,LLDW,CLMC,GGXH,DW,BDSL,SYSL,BYSL,BYJE,BYLYSL,BYLYJE,BYXJSL,BYXJJE,ZJE from @tabs
return
END
...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhb2000 2005-09-13
  • 打赏
  • 举报
回复
谢谢 zjcxc(邹建)
函数改成这样 就可以了
CREATE FUNCTION getclyb (@dxgcbh varchar(10),@lbmc varchar(20),@sj datetime,@sj1 datetime,@isjg smallint)
RETURNS @ybb TABLE (DXGCBH varchar(10) COLLATE Chinese_PRC_CI_AS not null, --单项工程
LBMC varchar(20) NOT NULL, --材料类别
.....
zjcxc 元老 2005-09-13
  • 打赏
  • 举报
回复
-- 排序规则的问题

select a.*,b.GCMC
from dbo.getclyb('WXY-A','水电','2005-9-1','2005-8-31',1 ) a
left join GC b
on a.DXGCBH COLLATE CHINESE_RPC_BIN=b.GCBH -- 强制指定使用统一的排序规则
wgsasd311 2005-09-13
  • 打赏
  • 举报
回复
无法测试,不好说。语法上没任何问题。
snowwolf613 2005-09-13
  • 打赏
  • 举报
回复
頂起﹐學習
iwl 2005-09-13
  • 打赏
  • 举报
回复
把表的排规则修改一下夜可以
vivianfdlpw 2005-09-13
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=3551

34,590

社区成员

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

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