我有一张桌子
WS_ID WS_WEBPAGE_ID WS_SPONSORS_ID WS_STATUS WS_CREATEDTS 2 3 2 N 2012-06-07 15:32:00 3 3 3 N 2012-06-07 15:37:00 4 3 4 Y 2012-06-07 15:41:00 5 1 1 Y 2012-06-07 16:05:00 6 2 1 Y 2012-06-07 16:05:00 7 2 4 Y 2012-06-07 16:05:00 8 4 1 Y 2012-06-07 16:05:00 9 1 3 Y 2012-06-07 16:05:00 10 1 2 Y 2012-06-07 16:05:00 11 1 4 Y 2012-06-07 16:05:00 12 2 3 Y 2012-06-07 16:05:00 13 2 3 Y 2012-06-07 16:05:00 14 2 1 Y 2012-06-07 16:05:00 24706 3 8,7,9,5,5 NULL NULL
我写了一个游标并调用了该游标中的split函数来拆分最后一条记录
Declare @splitc varchar(250)
Declare splitcursor cursor for
select ws_sponsors_id from dbo.TBL_WD_SPONSORS
open splitcursor
fetch next from splitcursor into @splitc
while(@@FETCH_STATUS = 0)
begin
print '@splitcursor'
--select * from dbo.Comma_Split(@ws_sponsors_id,',')
select dbo.Comma_Split(ws_sponsors_id,',') from dbo.TBL_WD_SPONSORS where ws_id = 24706
--select * from dbo.TBL_WD_SPONSORS where WS_SPONSORS_ID in(select * from dbo.Comma_Split(ws_sponsors_id,','))
fetch next from splitcursor into @splitc
end
close splitcursor
deallocate splitcursor
我收到了错误
找不到列“dbo”或用户定义的函数或聚合“dbo.Comma_Split”,或者名称不明确。
WS_ID WS_WEBPAGE_ID WS_SPONSORS_ID WS_STATUS WS_CREATEDTS 24706 3 8,7,9,5,5 NULL NULL
但我需要输出
WS_ID WS_WEBPAGE_ID WS_SPONSORS_ID WS_STATUS WS_CREATEDTS 24706 3 8 NULL NULL 24707 3 7 NULL NULL 24708 3 9 NULL NULL 24709 3 5 NULL NULL 24710 3 5 NULL NULL
如何获得输出
帮帮我。
答案 0 :(得分:0)
为什么不重新构建表,以便在WS_SPONSORS_ID列中只输入1个值,这样它就是外键关系,那么就不必执行这个分割功能。
答案 1 :(得分:0)
看起来您正在尝试使用的功能在您运行它的数据库上不存在。例如,试试这个,你会得到同样的错误:
SELECT dbo.This_Function_Most_Certainly_Doesnt_Exist('Unless you''re trying to break my example.')
这将证明它是否存在,以便你不必接受我的话。在您运行基于游标的查询的数据库上运行此命令:
SELECT * FROM INFORMATION_SCHEMA.ROUTINES R WHERE R.ROUTINE_NAME = 'Comma_Split'
如果没有返回任何行,那是因为那里不存在该功能。要么你在错误的数据库上,错误的版本,你需要在它上面运行CREATE FUNCTION,或类似的东西。
编辑:顺便说一句,至于如何解决实际问题:不要使用游标。游标用作数据结果集上的迭代形式。在光标中,您要选择单行的值:select dbo.Comma_Split(ws_sponsors_id,',') from dbo.TBL_WD_SPONSORS where ws_id = 24706
你拥有它的方式,你可以在该行上调用该函数,对表中的每一行调用一次。以下是拆分函数的一个很好的例子:http://praveenbattula.blogspot.com/2010/06/best-split-udf-function-with-delimeter.html
使用它你只需要写:
SELECT dbo.fnStringSplitter(ws_sponsors_id, ',') FROM dbo.TBL_WT_SPONSORS WHERE ws_id = 24706