我按如下方式执行存储过程:
exec SALESREPORTFORWEB
@StartDate = '03/20/2017', @EndDate = '03/21/2017'
存储过程
CREATE proc [dbo].[SALESREPORTFORWEB]
--SALESREPORTFORWEB @StartDate='03-20-2017' ,@EndDate='03-28-2017',@usercode in ('2739','1609')
@StartDate DATETIME =NULL ,
@EndDate DATETIME =NULL ,
@ITEMCODE VARCHAR(100)=NULL,
@ITEMDESCRIPTION VARCHAR(100)=NULL,
@CLIENTCODE Varchar(25) = null,
@CLIENTNAME VARCHAR(100)=NULL,
@CLIENTBRANCHCODE VARCHAR(100)=NULL,
@CLIENTBRANCHNAME VARCHAR(100)=NULL,
@BRANDCODE VARCHAR (25)=NULL,
@BRANDNAME VARCHAR(100)=NULL,
@USERCODE VARCHAR(25)=NULL,
@USERNAME VARCHAR(100)=NULL,
@SUBCHANNEL VARCHAR(25)=NULL
AS
SELECT H.UserCode,U.SALESMANNAME, CONVERT(CHAR(10), H.TrxDate, 103) AS DATE,D.ItemCode,I.Description AS ITEMDESCRIPTION,d.ItemGroupLevel5 AS BRANDCODE,
B.Description AS BRANDNAME,
H.ClientCode,
C1.Description AS Client,H.ClientBranchCode,C2.Description, C2.SubChannelCode AS BRANCHSUBCHANNEL,
ROUND(
SUM(
CASE WHEN D.QuantityLevel1 > 0 THEN
D.QuantityLevel1 * PriceUsedLevel1
ELSE
D.QuantityLevel3 * PriceUsedLevel3
END - ISNULL(D.TotalDiscountAmount, 0)
), 2) AS TrxAmount,SUM(D.QuantityBU) AS QTY
FROM tblTrxHeader H INNER JOIN
tblTrxDetail D ON H.TrxCode = D.TrxCode AND D.TrxStatus > 0 INNER JOIN
tblBrand B ON B.Code=D.ITEMGROUPLEVEL5 INNER JOIN
tblClient C1 ON H.ClientCode = C1.Code
INNER JOIN tblClient C2 ON H.ClientBranchCode=C2.Code
INNER JOIN TBLITEM I ON I.ITEMCODE=D.ITEMCODE
/*LEFT OUTER JOIN
tblRegion R ON R.Code = C.RegionCode*/ LEFT OUTER JOIN
vw_UnitManagers U ON U.SalesmanCode = H.UserCode
WHERE
H.TrxType IN (1) AND
DATEDIFF(dd,H.TrxDate,ISNULL(@StartDate,GETDATE())) <= 0 AND DATEDIFF(dd,H.TrxDate,ISNULL(@EndDate,GETDATE())) >= 0 AND
D.ITEMCODE= ISNULL(@ITEMCODE,D.ITEMCODE) AND
H.CLIENTCODE= ISNULL(@CLIENTCODE,H.CLIENTCODE)AND
H.ClientBranchCode=ISNULL(@CLIENTBRANCHCODE,H.ClientBranchCode) AND
D.ItemGroupLevel5=ISNULL(@BRANDCODE,D.ItemGroupLevel5)AND
H.UserCode in (ISNULL(@USERCODE,H.UserCode)) AND
C2.SubChannelCode=ISNULL(@SUBCHANNEL,C2.SubChannelCode)AND
B.Description LIKE('%'+ISNULL(@BRANDNAME,B.Description)+'%')AND
I.Description LIKE('%'+ISNULL(@ITEMDESCRIPTION,I.Description)+'%')AND
C1.Description LIKE('%'+ISNULL(@CLIENTNAME,C1.Description)+'%')AND
C2.Description LIKE('%'+ISNULL(@CLIENTBRANCHNAME,C2.Description)+'%')AND
U.SalesmanName LIKE('%'+ISNULL(@USERNAME,U.SalesmanName)+'%')
GROUP BY
--CONVERT(VARCHAR, H.TrxDate, 101),
H.UserCode,U.SALESMANNAME,H.TRXDATE,D.itemcode,I.Description,d.ItemGroupLevel5,
B.Description, H.ClientCode,C1.Description,H.ClientBranchCode,C2.Description, C2.SubChannelCode
ORDER BY H.TrxDate
其中@StartDate = '03/20/2017'
和@EndDate = '03/21/2017'
是存储过程的参数。
在我的代码中,它的外观如下:
var salesDataQuery = SalesDataModel.FromSql("exec SALESREPORTFORWEB '@StartDate='@StartDate, '@EndData='@EndData",
new SqlParameter("@StartDate", startdate),
new SqlParameter("@EndData", enddate));
但是这段代码会抛出一个错误:
&#39; @StartDate =&#39;
附近的语法错误无效
有人可以帮我做正确的存储过程调用吗?
非常感谢!
答案 0 :(得分:-1)
如何从这样的exec中裁剪参数:
var salesDataQuery = SalesDataModel.FromSql("exec SALESREPORTFORWEB @StartDate, @EndDate",
new SqlParameter("@StartDate", startdate),
new SqlParameter("@EndData", enddate));
编辑:为过程添加参数。