Sql SAP B1查询返回“;必须声明标量变量“;错误

Sql SAP B1查询返回“;必须声明标量变量“;错误,sql,sapb1,Sql,Sapb1,我正在尝试创建一个下拉菜单,该菜单将使用以下SQL代码按商品购买者限制查询结果。然而,我不断收到一个错误,指出我需要声明标量变量@ItemBuyer,尽管它在代码中已明确声明和设置 DECLARE @ItemBuyer VARCHAR(30) SET @ItemBuyer= /* T3.OwnerCode */ '[%1]' DECLARE @SQL VARCHAR(MAX) SET @SQL = 'SELECT T3.[DocNum] AS DocNumb

我正在尝试创建一个下拉菜单,该菜单将使用以下SQL代码按商品购买者限制查询结果。然而,我不断收到一个错误,指出我需要声明标量变量@ItemBuyer,尽管它在代码中已明确声明和设置

    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

我会像这样重写查询:

/*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
我仍然记不住动态语法查询,所以每次我都要使用这个链接:


还要注意的是,我去掉了一些在
select
where
语句中没有使用的表。这可能不会对查询速度造成太大的影响,但它只会使查询更干净。(我还清理了格式,将其设置为我最喜欢的样式,但这并不是绝对必要的)

为什么要使用动态sql?您使用的是动态查询,而不是为动态查询提供值。