2017-07-25 7 views
0

Je tente de créer un menu déroulant qui limitera les résultats de la requête par acheteur d'article avec le code SQL suivant. Cependant, je reçois toujours une erreur indiquant que je dois déclarer la variable scalaire @ItemBuyer, en dépit du fait qu'elle est clairement déclarée et définie dans le code.Requête SAP B1 Renvoie l'erreur "Doit déclarer la variable scalaire"

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) 

J'ai aussi essayé de déclarer et définir la variable comme ci-dessous:

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

Mais je reçois une erreur indiquant que la syntaxe est erronée, même à travers la variable retourne maintenant la valeur correcte. Im un peu coincé ici. J'espère que quelqu'un pourra m'aider.

Merci,

Krys

+0

Pourquoi utilisez-vous SQL dynamique? –

+0

Vous utilisez la requête dynamique et vous ne fournissez pas de valeur pour votre requête dynamique. – Hybridzz

Répondre

0

Je réécrire la requête comme ceci:

/*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 

Je ne peux toujours pas réussi à se souvenir de la requête de syntaxe dynamique, donc je dois utiliser ce lien chaque fois que je veux le faire: http://www.clientsfirst-us.com/blog/sap/sap-business-one/user-defined-prompts-in-sap-business-one-queries/

Notez également que je me suis débarrassé de quelques tables que vous n'utilisiez pas dans votre select ou vos instructions where. Cela ne va probablement pas faire une si grande différence dans la vitesse de la requête, mais cela la rend plus propre. (J'ai également nettoyé le formatage pour le mettre dans mon style préféré, mais ce n'est pas strictement nécessaire)