2010-10-28 64 views
1

我在Query中使用以下代碼來更新名爲ListClientCasePresentingIncidents的表,該表使用名爲fnSplit的函數拆分名爲@CasePresentingIncidents的逗號分隔的nvarchar。SQL Server插入查詢幫助

IF (@CasePresentingIncidents <> '') 
    INSERT INTO ListClientCasePresentingIncidents 
      (PresentingIncident , 
       CaseID 
      ) 
      SELECT SplitText AS PresentingIncident , 
        @CaseID 
      FROM fnSplit(@CasePresentingIncidents) 

所有這些作品真的很好一條記錄時,通過在@CaseID和@CasePresentingIncidents值。

問題是,我將如何修改此代碼,以便它從名爲ClientCase的表中取值而不是2個參數?它需要用ClientCase.CaseID和ClientCase.CasePresentingIncidents中的值替換@CaseID和@CasePresentingIncidents。非常感謝。

+1

是ClientCase.CasePresentingIncidents還是一個逗號分隔的列表,或者當您填充表時是否已將其分開? – HLGEM 2010-10-28 18:36:17

+0

ClientCase.CasePresentingIncidents也是一個以逗號分隔的nvarchar(MAX)。它與@CasePresentingIncidents具有相同的值類型,與ClientCase.CaseID具有與@CaseID相同的類型。 – Mitch 2010-10-28 19:57:43

回答

2

基本上,我可以看到解決這個的方法有兩種:

  1. 聯合(串連)中的所有ClientCase.CasePresentingIncidents值要被處理時,成一個字符串,並將其傳遞作爲參數傳遞給fnSplit()(即dbo.fnSplit() ?)。根據您使用的SQL Server版本,您可能會考慮不同的連接方式。如果你在這裏需要一些指導,我覺得這可能是一個很好的出發點:(相關,並在相關的部分相應上市有很多類似的問題)Concatenating Row Values

  2. 使用光標呼籲dbo.fnSplit()爲每一行ClientCase。我應該建議創建一個新的表值函數dbo.fnSplitMultiple(),它將實現這種方法。在你的例子中,你可以選擇dbo.fnSplitMultiple()而不是dbo.fnSplit()

如果得到的字符串可以很長,那麼也許第一種方法,但可能另有更具吸引力,也不會是非常合適的。我在處理服務器端非常長的字符串方面沒有太多經驗,使用SP和函數也是如此,所以我不確定,而對於我來說,這裏的遊標只是備份選項。