2017-08-28 56 views
0

我必須重新創建存在於DB1中的存儲過程,並將現有表映射到新數據庫DB2中的新表。並列的名字,姓氏字段,以便它可以適用於case語句

DB1中,表中有列Fullname,並且在新的db中有兩列firstname,lastname。我可以CONCAT但有一個用戶自定義函數也該截斷,我必須使用所有特殊字符。

如何使用的姓氏和名字列作爲一個完整的名稱列,使其符合這個case語句?

我正在從另一表中的[P名稱]就讀ENR這就好比具有所有的名字的主表,獲取從任一表的名稱,如圖case語句被調節。

我試圖尋找所有的博客和stackexchange,但不能得到期望的回覆。

masterfinancer = dbo.fn_RemoveSpecialChars(iif(enr.p_name = 'XXXXXXXXX,XXXXXXX(2)', 'XXXXX XXXX XXX GROUP', mv.master_vendor_name)) 
Sma_finace_key = iif(enr.p_name = 'XXXXXXXXX0L(2)', 1111, mv.ven_key) 

[P Name] = case 
       when enr.p_name = 'INACTIVE ' or enr.p_name = 'UNASSIGNED' 
        then [P Name] 
        else dbo.fn_RemoveSpecialChars(enr.p_name) 
      end 

回答

0

您需要在每個單獨的字段上使用該函數並將它們結合在一起。在這裏我刪除了IIF語句(僅在SQL 2012年工作),並創造你想要的假定全名場「姓」。我加聚結以避免全名字段爲空時,無論是第一或最後一個名字是NULL:

SELECT 
    masterfinancer = dbo.fn_RemoveSpecialChars(
      CASE 
       WHEN enr.p_name = 'XXXXXXXXX,XXXXXXX(2)' 
       THEN 'XXXXX XXXX XXX GROUP' 
       ELSE mv.master_vendor_name 
      END) 
    , Sma_finace_key = 
      CASE 
       WHEN enr.p_name = 'XXXXXXXXX0L(2)' 
       THEN 1111 
       ELSE mv.ven_key 
      END 
    , [P Name] = 
      CASE 
       WHEN enr.p_name IN('INACTIVE ', 'UNASSIGNED') 
       THEN [P Name] 
       ELSE dbo.fn_RemoveSpecialChars(enr.p_name) 
      END 
, FullName = 
    COALESCE(dbo.fn_RemoveSpecialChars(enr.last_name) + ', ', '') + 
    COALESCE(dbo.fn_RemoveSpecialChars(enr.first_name), '')