存储过程能直接用自己写的函数吗?
我存储过程里有这样一句
exec ('update '+@finnalTemp+' set ModelNO = (Select '+@i+'='+@i+'+'',''+RTRIM(ModelNO) from (select distinct PartNO,ModelNO from '+@temp5+') as thisTemp Where thisTemp.PartNO = '+@temp5+'.PartNO Order By ModelNO)')
我想把几个ModelNO中间加上“,”。不能用自定义函数,因为表名是个变量。
我想这样直接在存储过程里实现,但是不对,各位帮我看看,能直接在存储过程里实现吗?
谢谢
问题点数:20、回复次数:11Top
1 楼ppdty()回复于 2005-08-01 15:09:10 得分 0
没人回帖?
不够分再加啊Top
2 楼jensgn(风儿.Net)回复于 2005-08-01 15:22:07 得分 0
可以用,dbo.函数名Top
3 楼ppdty()回复于 2005-08-01 15:24:49 得分 0
不行啊,因为我的源表是变量,在函数里表名不能是变量的,所以不能在行数里做啊,各位帮我看看啊,就按照这样的格式(在存储过程里)怎么实现这个功能啊
谢谢了Top
4 楼gimy007(逮猫的耗子)回复于 2005-08-01 15:25:17 得分 0
这
ModelNO = (Select '+@i+'='+@i+'+'',''+RTRIM(ModelNO) from
可能有问题,没看明白Top
5 楼ppdty()回复于 2005-08-01 15:31:51 得分 0
(Select '+@i+'='+@i+'+'',''+RTRIM(ModelNO) from (select distinct PartNO,ModelNO from '+@temp5+') as thisTemp Where thisTemp.PartNO = '+@temp5+'.PartNO Order By ModelNO)
后面那句话就是根据PartNO 找到相应的ModelNO,因为ModelNO可能有多个,所以把他们合并起来,中间加上“,”
这个我在字定义函数里已经实现了。但问题是现在表名@temp5是变量,不能在函数里做,所以想各位帮帮忙,看能否在存储过程里实现Top
6 楼gimy007(逮猫的耗子)回复于 2005-08-01 15:34:20 得分 0
如果假定你的SQL没问题的话;
declare @s varchar(8000)
set @s='update '+@finnalTemp+' set ModelNO = (Select '+@i+'='+@i+'+'',''+RTRIM(ModelNO) from (select distinct PartNO,ModelNO from '+@temp5+') as thisTemp Where thisTemp.PartNO = '+@temp5+'.PartNO Order By ModelNO)'
execute(@s)
这样应该是可以执行的Top
7 楼ppdty()回复于 2005-08-01 16:03:13 得分 0
'update ##finnalTemp_67 set ModelNO = (Select =+','+RTRIM(ModelNO) from (select distinct PartNO,ModelNO from ##temp5_67) as thisTemp Where thisTemp.PartNO = ##temp5_67.PartNO Order By ModelNO)'
不行啊
按你说的我跟踪出来是上面这样的。
Select 转变的确有问题,下不去的啊
再帮我看看啊,谢谢Top
8 楼ppdty()回复于 2005-08-01 16:08:24 得分 0
哦,对了,我
set @i=''
是不是这里的问题啊
那我的i应该怎么设啊?
我最后想得到的是比如
ModelNO1,ModelNO2,ModelNO3这样的Top
9 楼ppdty()回复于 2005-08-01 17:09:53 得分 0
不对不对不对啊,我@i='i'的时候,他提示Invalid column name 'i'.
怎么办啊,再帮我看看啊Top
10 楼gimy007(逮猫的耗子)回复于 2005-08-02 08:20:03 得分 0
这样吧:你把
Select '+@i+'='+@i+'+'',''+RTRIM(ModelNO) from (select distinct PartNO,ModelNO from '+@temp5+') as thisTemp Where thisTemp.PartNO = '+@temp5+'.PartNO Order By ModelNO
这句用实际的参数代替一下,看看结果是什么;其实我主要是担心set ModelNO = [一推的查询结果];这好象就不行了Top
11 楼talantlee(小李小刀(daggerfly))回复于 2005-08-02 08:53:06 得分 0
exec ('update '+@finnalTemp+' set ModelNO = -----這裡應該是 in而不是等於
樓主可以建立一個函數它的返回類型是 字符串 例如 'a,b,c,'
這樣應該能實現你的要求的
Top




