2012-06-11 37 views
0

我有一個表#光標進行拆分的列#

 
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 

我寫了一個光標,並呼籲拆分功能到光標拆分的最後一條記錄

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 

而且我得到錯誤

Cannot find either column "dbo" or the user-defined function or aggregate "dbo.Comma_Split", or the name is ambiguous.

 
WS_ID WS_WEBPAGE_ID WS_SPONSORS_ID WS_STATUS WS_CREATEDTS 


24706 3    8,7,9,5,5  NULL  NULL 

但I N EED輸出

 
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 

如何獲得輸出

幫助我。

+2

因爲格式化是不存在的,這是很難說,但是這有什麼不同[從上一個問題](http://stackoverflow.com/questions/10948396/how-to-split-the-column-values-using-stored-procedure)? –

+0

你還在喊 – ganders

回答

0

爲什麼不重新設計你的表,所以你只需要在你的WS_SPONSORS_ID列中輸入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