0

我有一张桌子

WS_ID WS_WEBPAGE_ID WS_SPONSORS_ID WS_STATUS WS_CREATEDTS
2 3 2 否 2012-06-07 15:32:00
3 3 3 否 2012-06-07 15:37:00
4 3 4 是 2012-06-07 15:41:00
5 1 1 是 2012-06-07 16:05:00
6 2 1 是 2012-06-07 16:05:00
7 2 4 是 2012-06-07 16:05:00
8 4 1 是 2012-06-07 16:05:00
9 1 3 是 2012-06-07 16:05:00
10 1 2 是 2012-06-07 16:05:00
11 1 4 是 2012-06-07 16:05:00
12 2 3 是 2012-06-07 16:05:00
13 2 3 是 2012-06-07 16:05:00
14 2 1 是 2012-06-07 16:05:00
24706 3 8,7,9,5,5 NULL NULL

我写了一个游标并将拆分函数调用到该游标中以拆分最后一条记录

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 空 空
24707 3 7 空 空
24708 3 9 空 空
24709 3 5 空空
24710 3 5 空 空

如何获得输出

帮帮我。

4

2 回答 2

0

为什么不重新设计您的表,以便您在 WS_SPONSORS_ID 列中只输入 1 个值,因此它是外键关系,那么您就不必执行此拆分功能。

于 2012-06-11T17:44:58.843 回答
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
于 2012-06-11T18:42:19.937 回答