2017-07-25 135 views
0

我正在嘗試創建一個下拉菜單,它將限制物品採購員使用以下SQL代碼查詢結果。但是,我不斷收到一個錯誤,指出我需要聲明標量變量@ItemBuyer,儘管它明確聲明並在代碼中進行了設置。SAP B1查詢返回「必須聲明標量變量」錯誤

DECLARE @ItemBuyer VARCHAR(30) 
    SET @ItemBuyer= /* T3.OwnerCode */ '[%1]' 

    DECLARE @SQL VARCHAR(MAX) 
    SET @SQL = 'SELECT T3.[DocNum] AS DocNumber, T3.[CardCode] AS 
    VendorCode, T3.[CardName] AS VendorName, T3.OwnerCode as BuyerID, T2. 
    [ItemCode] AS ItemNo, T2.[U_CPM_LegItemNo] AS LegacyItemNumber, T2. 
    [Dscription] AS ItemDescription, T2.[U_CPM_ConfDate] AS POConfirmDate, 
    T2.[OpenCreQty] AS CreditMemoAmount FROM [dbo].[OITG] T0 , [dbo]. 
    [OITM] T1 INNER JOIN [dbo].[POR1] T2 ON T2.[ItemCode] = T1. 
    [ItemCode] INNER JOIN [dbo].[OPOR] T3 ON T3.[DocEntry] = T2. 
    [DocEntry] WHERE (T2.[OpenCreQty] > (0)) AND (T2.[U_CPM_ConfDate] 
    IS NULL ) and (T3.[OwnerCode] = @ItemBuyer)' 

    EXEC(@SQL) 

我也嘗試聲明和設置變量象下面這樣:

DECLARE @ItemBuyer VARCHAR(30) = /* T3.[OwnerCode] */ '[%0]' 

但後來我得到一個錯誤,指出語法是錯誤的,甚至可以通過變量現在返回正確的值。我有點卡在這裏。希望有人能幫助我。

感謝,

Krys

+0

爲什麼使用動態sql? –

+0

您正在使用動態查詢,但您沒有爲動態查詢提供價值。 – Hybridzz

回答

0

我會改寫這樣的查詢:

/*SELECT FROM [dbo].[OPOR] P1*/ 
declare @ItemBuyer as int 
/* WHERE */ 
set @ItemBuyer = /* P1.OwnerCode */ '[%0]' 


SELECT T3.[DocNum] AS DocNumber 
, T3.[CardCode] AS VendorCode 
, T3.[CardName] AS VendorName 
, T3.OwnerCode as BuyerID 
, T2.[ItemCode] AS ItemNo 
, T2.[U_CPM_LegItemNo] AS LegacyItemNumber 
, T2.[Dscription] AS ItemDescription 
, T2.[U_CPM_ConfDate] AS POConfirmDate 
, T2.[OpenCreQty] AS CreditMemoAmount 
FROM [dbo].[POR1] T2 
INNER JOIN [dbo].[OPOR] T3 ON T3.[DocEntry] = T2.[DocEntry] 
WHERE T2.[OpenCreQty] > 0 
AND T2.[U_CPM_ConfDate] IS NULL 
and T3.[OwnerCode] = @ItemBuyer 

我仍然不能設法記住動態語法查詢,所以我必須使用此鏈接每一次我想要做到這一點:http://www.clientsfirst-us.com/blog/sap/sap-business-one/user-defined-prompts-in-sap-business-one-queries/

請注意,我擺脫了幾個表,你沒有在你的使用或您的where報表。這可能不會使查詢速度產生很大的差異,但它只是使它更清晰。 (我還清理了格式以將其放入我最喜歡的樣式中,但這不是必須的)