CREATE PROCEDURE getchildid
@aid bigint,
@childid varchar(200) output
AS
declare @curid bigint
declare @tid int
set @childid=convert(varchar,@aid)
set @childid=@childid+','
declare cur cursor local for select tradeid from trades where parentid=@aid
open cur
fetch next from cur into @curidwhile(@@fetch_status=0)
begin
set @childid=@childid+convert(varchar,@curid)
exec getchildid @curid, @tid output
fetch next from cur into @curid
end
close cur
deallocate cur
GO只要加上红色部分就报"将数据类型varchar转换为int时出错"
@aid bigint,
@childid varchar(200) output
AS
declare @curid bigint
declare @tid int
set @childid=convert(varchar,@aid)
set @childid=@childid+','
declare cur cursor local for select tradeid from trades where parentid=@aid
open cur
fetch next from cur into @curidwhile(@@fetch_status=0)
begin
set @childid=@childid+convert(varchar,@curid)
exec getchildid @curid, @tid output
fetch next from cur into @curid
end
close cur
deallocate cur
GO只要加上红色部分就报"将数据类型varchar转换为int时出错"
解决方案 »
- 怎样将服务器的文件下载到本机
- 有没有简单的语句返回前几条id加逗号合并成的字符串?
- 这个触发器怎么写?时间间隔内不准新增
- vs2003连接sql2000与vs2005连接sql2005在的问题?
- 在SqlServer2000的存储过程中"Alter table_name Modify column_name date_type(..)" 语句怎么写??
- ***数据表如何换化显示问题***
- 请指教这条SQL日期比较语句错在那里了??
- 一个触发器的小问题,更新一个表中三列中某一列或者两列或者三列都更新时才触发的触发器怎么写?
- 哪有软件建模工具下载?
- sql查询时怎样将上个月某天到这个月某天的数据作为当月的统计?
- .net中关于数据库对象的类是哪一个?该对象应该能提供有关数据库方面的功能。如判断数据库的存在、数据库状态等。
- 下面Code中:Select 1是实现一个什么样的功能?
GOCREATE PROCEDURE getchildid
@aid bigint,
@childid varchar(200) output
AS
declare @curid bigint
declare @tid int
set @childid=convert(varchar,@aid)
set @childid=@childid+','
--declare cur cursor local for select tradeid from trades where parentid=@aid
--open cur
--fetch next from cur into @curid --while(@@fetch_status=0)
--begin
--set @childid=@childid+convert(varchar,@curid)
--exec getchildid @curid, @tid output --fetch next from cur into @curid
--end
--close cur
--deallocate cur
GO DECLARE
@childid varchar(200);
EXEC getchildid
@aid = 1,
@childid = @childid OUTPUT;
SELECT @childid;
GODROP PROC getchildid/*-- 结果
--------------
1,(1 行受影响)
--*/
@aid bigint,
@childid varchar(200) output
AS
declare @curid bigint
declare @tid int
set @childid=convert(varchar,@aid)
set @childid=@childid+','
declare cur cursor local for select tradeid from trades where parentid=@aid
open cur
fetch next from cur into @curid while(@@fetch_status=0)
begin
set @childid=@childid+convert(varchar,@curid)
exec getchildid @curid, @tid output -- 问题在这一句, 你的 @tid 是做为接受 @childid 这个输出参数的值, @tid 是数字型, 而 @childid 是字符 型, 所以输出结果的时候会发生数据类型转换, 而你又在存储过程中为参数 @childid 赋予了不能转换为数字的数据, 所以调用存储过程会报错
-- 个人感觉你这里的 @tid 没有用, 应该是用 @childid 才对fetch next from cur into @curid
end
close cur
deallocate cur
GO
问题在这一句, 你的 @tid 是做为接受 @childid 这个输出参数的值, @tid 是数字型, 而 @childid 是字符 型, 所以输出结果的时候会发生数据类型转换, 而你又在存储过程中为参数 @childid 赋予了不能转换为数字的数据, 所以调用存储过程会报错
-- 个人感觉你这里的 @tid 没有用, 应该是用 @childid 才对