2011-07-11 12 views
0

我有一個同步到LDAP/eDirectory的Web應用程序,它的數據存儲在SQL Server 2008企業數據庫中。SQL Server 2008:從數據庫,追加文本和更新列中選擇兩個字段與結果

我們的組織剛剛遷移到MS/AD,並通過此遷移發佈了新的用戶帳戶命名約定,當然這改變了每個人的電子郵件地址。

Web應用程序使用的EMAIL字段中CLIENT表數據庫中作爲主/必填字段的,所以,如果我可以修改現有CLIENT.EMAIL記錄以反映新的電子郵件地址格式,並同步到AD,所有的剩餘的帳戶信息將被更新而不會丟失任何帳戶,並且沒有這些帳戶在Web應用程序中失去對其歷史的訪問權限(我已通過修改單個EMAIL記錄並同步到AD進行了測試,然後該帳戶可以使用AD憑證登錄,並且查看使用LDAP/eDir用戶帳戶創建的所有帳戶歷史記錄)。

我可以手動做到這一點(更新1,255條記錄),但我認爲一個SQL查詢將是一個更好的解決方案。

我迄今所做的就是寫以下SELECT聲明(這爲我提供了我想要插入到生產數據庫的EMAIL列的結果):

SELECT FIRST_NAME + '.' + LAST_NAME + '@email.com' FROM db_name.TABLE_NAME 

我需要什麼,能夠用UPDATEEMAIL字段/列(它當前有一個[email protected]格式)與SELECT語句的結果進行比較。

如果我在該語句上面添加一條:UPDATE CLIENT.EMAIL行,我會在上面顯示的SELECT部分​​中出現語法錯誤。

我想:「」

  • 利用現有EMAIL場(這表明[email protected]客戶端約翰·史密斯),
  • 然後SELECT由分開的姓氏和名字字段並追加@email.com來讓我結束了[email protected]對於相同的記錄結束(和更新與基於[email protected]格式的相應條目中的整個電子郵件字段/列。

是這個可能嗎?如果是這樣,我如何解決我一直得到的語法錯誤?任何援助都將非常感激。

+0

如果您發佈代碼,XML或數據樣本,**請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼樣本」按鈕(「{}」)以精確地格式化和語法突出顯示它! –

+0

我猜你很幸運沒有兩個人在你的組織中共用同一個名字? –

回答

1
UPDATE db_name.TABLE_NAME 
SET EMAIL = FIRST_NAME + '.' + LAST_NAME + '@email.com' 
0

假設你有兩個單獨的表,不知道ID鏈接,但這應該幫助

UPDATE Client SET email = 
    (SELECT FIRST_NAME + '.' + LAST_NAME + '@email.com' 
    FROM db_name.TABLE_NAME AS ldap WHERE ldap.ADGuid = Client.ADGuid) 

如果只有一個表,那麼所有你需要的是

UPDATE Client SET email = SELECT FIRST_NAME + '.' + LAST_NAME + '@email.com' 
+0

tks!收到以下回復:消息207,級別16,狀態1,行3 無效的列名稱'ADGuid'。 消息207,級別16,狀態1,行3 無效的列名稱'ADGuid'。 – lightjump

+1

您可以用ADGuid替換唯一標識用戶的列。塞弗不得不猜測,因爲你沒有包含那個細節 - 相反,你用一句話把我們混在一起,然後用另一個句子把TABLE_NAME混淆。 –

0

加入目錄表到客戶端表中並執行更新,如下所示:

UPDATE c 
SET c.EMAIL = d.FIRST_NAME + '.' + d.LAST_NAME 
FROM CLIENT c 
INNER JOIN DIRECTORY d ON (whatever you need to do to join them goes here. you can join using multiple criteria with substrings, for instance) 
+1

如果您發佈代碼,XML或數據樣本,**請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」)以精確地格式化和語法突出顯示它! –

+1

+1幫助菜鳥。 – hoodaticus

0

首先,檢查這表明你想要什麼:

SELECT FIRST_NAME 
    , LAST_NAME 
    , email AS currentEmail 
    , FIRST_NAME + '.' + LAST_NAME 
     + SUBSTRING(email, CHARINDEX('@', email), LEN(email)) 
     AS EmailToBeWritten 
FROM Client ; 

然後,如果你是絕對肯定的EmailToBeWritten是顯示要更新,使用email領域正是:

UPDATE Client 
    SET email = FIRST_NAME + '.' + LAST_NAME 
       + SUBSTRING(email, CHARINDEX('@', email), LEN(email)) ; 
相關問題