2012-09-10 100 views
0

我想下面運行的代碼,我不斷收到此錯誤回:更新表設置列的SQL Server

消息512,級別16,狀態1,行1 子查詢返回多個1 值。當子查詢遵循=,!=,<,< =,>>,> =或當子查詢用作表達式時,這是不允許的。該語句已終止。

我試圖做一個字段來識別個人用戶。有什麼建議麼?

UPDATE dbo.AAASTA_CONTACT 
SET dbo.AAASTA_CONTACT.ALIAS_KEY = 
(SELECT(SUBSTRING(COALESCE(CAST(ADDR.ADDR_ZIPCODE AS NCHAR(5)), '  ') 
     + COALESCE(CAST(UPPER(CON2.CON_LAST_NAME)AS NCHAR(5)), '  ') 
     + COALESCE(CAST(UPPER(CON2.CON_FST_NAME)AS NCHAR(5)), '  ') 
     + COALESCE(CAST(UPPER(ADDR.ADDR_ADDR_NAME) AS NCHAR(5)), '  '),1,20)) 
FROM dbo.AAASTA_CONTACT CON2 
JOIN dbo.AAASTA_ADDR_PER ADDR 
ON (CON2.CON_PERSON_UID = ADDR.T_ADDR_PER_PER_ID)) 
+0

聽起來像你的內部SELECT語句(它定義了你想設置ALIAS_KEY的值)返回多個值。哪些值應該設置爲ALIAS_KEY? – rodion

+0

我只要求一個子字符串。如果我將它作爲select而不是SET來運行,它會返回一列信息。 – Fear605

+0

問題是查詢分析器已經推斷查詢具有返回多個結果的'潛在'。 – RThomas

回答

1

我想這就是你要找的。它會用正確的值更新每一行:

UPDATE 
    dbo.AAASTA_CONTACT 
SET 
    dbo.AAASTA_CONTACT.ALIAS_KEY = SUBSTRING(COALESCE(CAST(ADDR.ADDR_ZIPCODE AS NCHAR(5)), '  ') + COALESCE(CAST(UPPER(CON2.CON_LAST_NAME)AS NCHAR(5)), '  ') + COALESCE(CAST(UPPER(CON2.CON_FST_NAME)AS NCHAR(5)), '  ') + COALESCE(CAST(UPPER(ADDR.ADDR_ADDR_NAME) AS NCHAR(5)), '  '),1,20) 
FROM 
    dbo.AAASTA_CONTACT CON2 
JOIN 
    dbo.AAASTA_ADDR_PER ADDR 
    ON (CON2.CON_PERSON_UID = ADDR.T_ADDR_PER_PER_ID) 
+0

啊,就是這樣。猜猜我的想法只是關於如何正確地做到這一點。謝謝您的幫助! – Fear605