为过程或函数 dbo.GetBOMNote 指定了过多的参数。

greenhong 2015-03-26 10:59:34
最近学着玩玩SQL Server 2012

自定义了一个函数,大意是将BPCS中的多行BOM Note合并到一行上
USE [MyBPCS]
GO
/****** Object: UserDefinedFunction [dbo].[GetBOMNote] Script Date: 2015/3/26 9:59:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[GetBOMNote](@Item CHAR(35),@Seq DECIMAL(4,0))
RETURNS NVARCHAR(4000)
AS
BEGIN

DECLARE @Note NVARCHAR(4000)
SET @Note = ''
SELECT @Note = @Note+';'+RTRIM(PNDES) FROM MyBPCS.dbo.MPN
WHERE PNPROD=@Item AND PNOPN=@Seq
RETURN STUFF(@Note,1,1,'')
END

然后用SELECT语句看看效果,一个参数时可行,两个就出现后面的错误消息
SELECT PNPROD,PNOPN,dbo.GetBOMNote(PNPROD,PNOPN) AS SNames FROM MYBPCS.DBO.MPN GROUP BY PNPROD,PNOPN

消息 8144,级别 16,状态 2,第 2 行
为过程或函数 dbo.GetBOMNote 指定了过多的参数。
...全文
256 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
greenhong 2015-03-26
  • 打赏
  • 举报
回复
引用 5 楼 Tiger_Zhao 的回复:
难道因为是GROUP BY同级的原因,下面这样呢?
SELECT PNPROD,PNOPN,dbo.GetBOMNote(PNPROD,PNOPN) AS SNames
  FROM (    SELECT PNPROD,PNOPN
              FROM MYBPCS.DBO.MPN
          GROUP BY PNPROD,PNOPN 
       ) t
又:查询语句和前面的建函数语句用 GO 分开来了吧。
也不行,出现同样错误消息 函数和查询语句,分别在不同查询窗口
Tiger_Zhao 2015-03-26
  • 打赏
  • 举报
回复
难道因为是GROUP BY同级的原因,下面这样呢?
SELECT PNPROD,PNOPN,dbo.GetBOMNote(PNPROD,PNOPN) AS SNames
FROM ( SELECT PNPROD,PNOPN
FROM MYBPCS.DBO.MPN
GROUP BY PNPROD,PNOPN
) t

又:查询语句和前面的建函数语句用 GO 分开来了吧。
greenhong 2015-03-26
  • 打赏
  • 举报
回复
SELECT语句中的GROUP BY感觉有些类似循环体,不知道该如何使用Parameters.Clear()来清空参数
greenhong 2015-03-26
  • 打赏
  • 举报
回复
引用 2 楼 Tiger_Zhao 的回复:
看 FROM MYBPCS.DBO.MPN 的格式当前数据库不在 MYBPCS 里吧。 当前数据库正好也有 GetBOMNote 函数是一个参数的?
MPN肯定在,因为调用时用一个参数,可以运行结束,只是 SNames 字段结果为空 SELECT PNPROD,PNOPN,dbo.GetBOMNote(PNPROD) AS SNames FROM MYBPCS.DBO.MPN GROUP BY PNPROD,PNOPN 因为是玩玩,只有这一个自定义函数,顺便查了查,系统函数也没有和它同名的 感谢楼上的秒速回复
Tiger_Zhao 2015-03-26
  • 打赏
  • 举报
回复
看 FROM MYBPCS.DBO.MPN 的格式当前数据库不在 MYBPCS 里吧。
当前数据库正好也有 GetBOMNote 函数是一个参数的?
greenhong 2015-03-26
  • 打赏
  • 举报
回复
百度了一哈 说是和系统同名不能执行 循环体内也不行 貌似我这个不是这两种情况吧
greenhong 2015-03-26
  • 打赏
  • 举报
回复
建了索引,5秒结束,谢谢Tiger Zhao
greenhong 2015-03-26
  • 打赏
  • 举报
回复
引用 11 楼 Tiger_Zhao 的回复:
(PNPROD,PNOPN)上建聚集索引没有?
没呢,以前偶尔玩玩别人的实例,这几天才自己建了个实例玩,还不会玩,一会去百度一下如何建索引
Tiger_Zhao 2015-03-26
  • 打赏
  • 举报
回复
(PNPROD,PNOPN)上建聚集索引没有?
greenhong 2015-03-26
  • 打赏
  • 举报
回复
成了 结贴给分 PS:貌似此法效率不高,原纪录118064条,合并后99145条,用时23分39秒
greenhong 2015-03-26
  • 打赏
  • 举报
回复
太感谢楼上两位了, 在系统数据库-master-可编程性-函数-标量值函数中,真的找个一个同名函数,并且只有一个参数 待我删除后再来
中国风 2015-03-26
  • 打赏
  • 举报
回复
SELECT  PNPROD
       ,PNOPN
       ,MYBPCS.dbo.GetBOMNote(PNPROD, PNOPN) AS SNames
FROM    MYBPCS.DBO.MPN
GROUP BY PNPROD
       ,PNOPN
查看函数GetBOMNote是否在MYBPCS库,没指定是为当前库,当前库应该是有同名函数,参数不一致
Tiger_Zhao 2015-03-26
  • 打赏
  • 举报
回复
我在2008上用一样的方式测试了一下是成功的。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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