2012-03-08 63 views
2

我越來越的值賦給一個變量在SELECT語句,然後用來查找嵌套查詢語句價值

是分配一個值給變量的SELECT語句不能與合併錯誤數據檢索操作。

這是我的SELECT語句。

SELECT A.vendor_id, **@vendor_employee** = A.vendor_employee_id 
    , B.txt_first_name, B.txt_last_name, 
    SELECT txt_Vendor_Employee_Detail_Element, 
     (CASE 
      WHEN txt_Vendor_Employee_Detail_Value <> '' 
       AND txt_Vendor_Employee_Detail_Value IS NOT NULL 
      THEN txt_Vendor_Employee_Detail_Value 
      ELSE CONVERT(VARCHAR, txt_Vendor_Employee_Detail_Date) 
     END) AS Vendor_Detail_Element_Value 
    FROM t_vendor_employee_detail 
    WHERE vendor_employee_id = **@vendor_employee**) 

FROM... 

回答

0

是的,基本上你不能在同一個select語句中返回數據和賦值變量。我想你打算做的是correlated subquery,它引用了一個外部值。

這wolud是這個樣子:

SELECT A.vendor_id, A.vendor_employee_id 
    , B.txt_first_name, B.txt_last_name, 
    (SELECT d.txt_Vendor_Employee_Detail_Element 
    FROM t_vendor_employee_detail d 
    WHERE d.vendor_employee_id = A.Vendor_employee_id /* references outside the subqquery */) 

FROM... 

,但你也在你的子查詢作爲加入的可能應該重寫返回多個行。

SELECT A.vendor_id, A.vendor_employee_id 
    , B.txt_first_name, B.txt_last_name, 
    d.txt_Vendor_Employee_Detail_Element, 
     (CASE 
      WHEN D.txt_Vendor_Employee_Detail_Value <> '' 
       AND d.txt_Vendor_Employee_Detail_Value IS NOT NULL 
      THEN d.txt_Vendor_Employee_Detail_Value 
      ELSE CONVERT(VARCHAR, d.txt_Vendor_Employee_Detail_Date) 
     END) AS Vendor_Detail_Element_Value 
FROM vendor_table_A A 
    INNER JOIN t_vendor_employee_detail d 
     ON d.vendor_employee_id = A.vendor_employee_id 
    INNER JOIN vendor_table_B B 
     ON... 

這些例子會給你基本的想法,但我們真的需要整個查詢給你一個完整的解決方案。

+0

這解決了這個問題。我不認爲我可以在嵌套查詢中使用外部值。謝謝你,先生 – dright 2012-03-08 17:07:04

0

這看起來像是可以使用JOIN重寫的東西。很難說怎麼沒有看到整個查詢,但這裏是一個嘗試:

SELECT A.vendor_id, A.vendor_employee_id 
    , B.txt_first_name, B.txt_last_name, 
    c.txt_Vendor_Employee_Detail_Element, 
     (CASE 
      WHEN c.txt_Vendor_Employee_Detail_Value <> '' 
       AND c.txt_Vendor_Employee_Detail_Value IS NOT NULL 
      THEN c.txt_Vendor_Employee_Detail_Value 
      ELSE CONVERT(VARCHAR, c.txt_Vendor_Employee_Detail_Date) 
     END) AS Vendor_Detail_Element_Value 
FROM ... 

INNER JOIN t_vendor_employee_detail c 
ON c.vendor_employee_id = A.vendor_employee_id 

由於錯誤消息說,你不能在你嘗試的方式使用的變量。

+0

雅,我沒有使用該連接。我的問題是,我不知道我可以識別嵌套查詢中的外部值。感謝您的幫助 – dright 2012-03-08 17:06:53

0

您可以使用合併語句一起檢索和分配數據。

事情是這樣的: DECLARE @ID TABLE( ID INT )

MERGE INTO @ID 
USING (
    select 1 a,2 b,3 c 
) as src 
ON (1 = 2) 
WHEN NOT MATCHED THEN 
    INSERT (ID) 
VALUES (Src.a) 
OUTPUT src.b, src.c 
; 

SELECT * FROM @ID