存储过程, 15个参数, 多吗?

dinoalex 2011-11-05 10:35:39
现在问题就是, 有时可以执行, 有时不能执行, 提示: 为存储过程或函数 proc_abc 指定了过多的参数

请教大牛们, 有没有方法可以解决


没有的话, 请问大牛们, SQL有没有拆分相关的函数
...全文
107 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
-晴天 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dinoalex 的回复:]
额, 传值时, 我不传千位格式的就可以解决

现在我想问题我在8楼写的问题, 如何分解, 如果是INT呢? 不会是分解后CAST吧?
[/Quote]

那就要做成字符串,然后用 charindex 逐个拆分.
dawugui 2011-11-06
  • 打赏
  • 举报
回复
那就接分了.

如果嫌多,可以考虑用逗号串起来做为一个参数传进去.
然后再里面分解之后再用.
dinoalex 2011-11-06
  • 打赏
  • 举报
回复
额, 传值时, 我不传千位格式的就可以解决

现在我想问题我在8楼写的问题, 如何分解, 如果是INT呢? 不会是分解后CAST吧?
中国风 2011-11-06
  • 打赏
  • 举报
回复
或在程序里处理“,”
中国风 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dinoalex 的回复:]

个数没错, 我知道原因了, 是因为钱币的值有千位
[/Quote]

存储过程的接收变量为字符,传参时能字符串方式传参。

replace--过滤","
快溜 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 dinoalex 的回复:]
提示: 为存储过程或函数 proc_abc 指定了过多的参数
[/Quote]这个提示不是因为你定义参数过多,是你传入的参数跟定义的参数对不上号
dinoalex 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dawugui 的回复:]
那就接分了.

如果嫌多,可以考虑用逗号串起来做为一个参数传进去.
然后再里面分解之后再用.
[/Quote]

如何分解?
叶子 2011-11-06
  • 打赏
  • 举报
回复
15个不多,提示是因为你的参数对应关系不匹配。
迪迦凹凸曼 2011-11-06
  • 打赏
  • 举报
回复

CREATE FUNCTION [dbo].[fn_SplitStr]
(
@String NVARCHAR(4000), --待分隔的字符串
@Separator NVARCHAR(4) --分隔符号
)
RETURNS @strTable TABLE (strVal NVARCHAR(4000)) --返回字符串列表
AS
BEGIN
DECLARE
@Occurrences INT,
@Counter INT,
@tmpStr NVARCHAR(4000)

SET @Counter = 0

IF SUBSTRING(@String,LEN(@String),1) <> @Separator
SET @String = @String + @Separator

SET @Occurrences = (DATALENGTH(REPLACE(@String,@Separator,@Separator+'#')) - DATALENGTH(@String))/ DATALENGTH(@Separator)
SET @tmpStr = @String

WHILE @Counter <= @Occurrences
BEGIN
SET @Counter = @Counter + 1
IF(LEN(SUBSTRING(@tmpStr,1,CHARINDEX(@Separator,@tmpStr)-1)) > 0)
INSERT INTO @strTable VALUES(SUBSTRING(@tmpStr,1,CHARINDEX(@Separator,@tmpStr)-1))

SET @tmpStr = SUBSTRING(@tmpStr,CHARINDEX(@Separator,@tmpStr)+1,4000)

IF DATALENGTH(@tmpStr) = 0
BREAK
END
RETURN
END

--小F-- 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dinoalex 的回复:]
当散分帖了
[/Quote]
JF
zlp321002 2011-11-06
  • 打赏
  • 举报
回复
我觉得还是你调用的存储过程程序逻辑判断,要测试下。因为有的条件的时候,需要传递15个参数,有的时候可能只要6个参数,每次都参数都不一定,或者有的时候,你已经超过了15个参数,传递过去的时候。导致报德错,显然你报的错,是前台抛出来的,try{} catch{} 下。
dinoalex 2011-11-05
  • 打赏
  • 举报
回复
当散分帖了
dinoalex 2011-11-05
  • 打赏
  • 举报
回复
个数没错, 我知道原因了, 是因为钱币的值有千位
-晴天 2011-11-05
  • 打赏
  • 举报
回复
它本来只要3个,你给它5个,就会出这样的错.

也许是因为参数比较多,容易看花眼的缘故.
-晴天 2011-11-05
  • 打赏
  • 举报
回复
参数个数无所谓多不多,关键是需求.

你这个错误是在调用的时候,实参的数目比形参的数目多了的结果.
NBDBA 2011-11-05
  • 打赏
  • 举报
回复
如果需要,没有多不多 的说法

提示: 为存储过程或函数 proc_abc 指定了过多的参数
那肯定是调用参数写错了的

解决方法:查出错误并解决之(好像是废话)
abcdwell 2011-11-05
  • 打赏
  • 举报
回复
charindex

22,209

社区成员

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

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