对于这段代码,当我介绍2个日期变量时,代码错误带有错误.
错误是
Msg 137, Level 15, State 1, Line 8
Must declare the scalar variable "@STARTDATE".
Msg 137, Level 15, State 1, Line 9
Must declare the scalar variable "@ENDDATE".
Run Code Online (Sandbox Code Playgroud)
当我的大脑现在正式死亡时,有什么想法绕过这个吗?
DECLARE
@Query1 AS NVARCHAR(MAX),
@Startdate DATETIME,
@Enddate DATETIME
SET @STARTDATE = '10-JAN-2012'
SET @ENDDATE = '11-JAN-2012'
SET @Query1 = '
;WITH CTE AS
(
select COALESCE( PT.[description] , ''Grand Total'') AS [Transaction Type],
Sum (AI.PRICE_INC_VAT) AS [AMOUNT (ú) CREDIT],
P.[DESCRIPTION] AS [PRODUCT TYPE]
From [dbo].[T1] C
join [dbo].[T2] S on S.[Customer_ID]=C.[Customer_ID]
join [dbo].[T3] SO on SO.[SITE_ID]=S.[SITE_ID]
join [dbo].[T4] OI on OI.[ORDER_ID]=SO.[SITE_ORDER_ID]
left join [dbo].[T5] P on P.[PRODUCT_ID]=OI.[PRODUCT_ID]
JOIN [dbo].[T6] AI ON AI.ORDER_ITEM_ID = OI.ORDER_ITEM_ID
JOIN [T7] JBAI ON JBAI.ACTION_ITEM_ID = AI.ACTION_ITEM_ID
JOIN T8 JB ON JB.JOB_BATCH_ID = JBAI.JOB_BATCH_ID
JOIN [T9] PA on PA.PAYMENT_ID=JB.PAYMENT_ID
LEFT JOIN [T10] CU ON JB.CUSTOMER_USER_ID = CU.CUSTOMER_USER_ID
JOIN [T11] PT ON PT.PAYMENT_TYPE_ID=PA.PAYMENT_TYPE_ID
LEFT JOIN [T12] ON SU.SYS_USER_ID=JB.SYS_USER_ID
where P.[PRODUCT_CATEGORY_ID]= ''PADS''
and C.COMPANY_ID= ''19992''
and PA.DATE_RECEIVED BETWEEN @Startdate AND @Enddate
group by PT.DESCRIPTION, P.DESCRIPTION
)'
Run Code Online (Sandbox Code Playgroud)
您的参数超出了sql查询的范围.您需要将参数传递给sql字符串.您会注意到您还必须将参数varchar强制转换为可以连接到字符串:
DECLARE
@Query1 AS NVARCHAR(MAX),
@Startdate DATETIME,
@Enddate DATETIME
SET @STARTDATE = '10-JAN-2012'
SET @ENDDATE = '11-JAN-2012'
SET @Query1 = '
;WITH CTE AS
(
select COALESCE( PT.[description] , ''Grand Total'') AS [Transaction Type],
Sum (AI.PRICE_INC_VAT) AS [AMOUNT (ú) CREDIT],
P.[DESCRIPTION] AS [PRODUCT TYPE]
From [dbo].[T1] C
join [dbo].[T2] S on S.[Customer_ID]=C.[Customer_ID]
join [dbo].[T3] SO on SO.[SITE_ID]=S.[SITE_ID]
join [dbo].[T4] OI on OI.[ORDER_ID]=SO.[SITE_ORDER_ID]
left join [dbo].[T5] P on P.[PRODUCT_ID]=OI.[PRODUCT_ID]
JOIN [dbo].[T6] AI ON AI.ORDER_ITEM_ID = OI.ORDER_ITEM_ID
JOIN [T7] JBAI ON JBAI.ACTION_ITEM_ID = AI.ACTION_ITEM_ID
JOIN T8 JB ON JB.JOB_BATCH_ID = JBAI.JOB_BATCH_ID
JOIN [T9] PA on PA.PAYMENT_ID=JB.PAYMENT_ID
LEFT JOIN [T10] CU ON JB.CUSTOMER_USER_ID = CU.CUSTOMER_USER_ID
JOIN [T11] PT ON PT.PAYMENT_TYPE_ID=PA.PAYMENT_TYPE_ID
LEFT JOIN [T12] ON SU.SYS_USER_ID=JB.SYS_USER_ID
where P.[PRODUCT_CATEGORY_ID]= ''PADS''
and C.COMPANY_ID= ''19992''
and PA.DATE_RECEIVED BETWEEN '+ convert(varchar(10), @Startdate, 120)
+ ' AND '+ convert(varchar(10), @Enddate, 120) +'
group by PT.DESCRIPTION, P.DESCRIPTION
)'
Run Code Online (Sandbox Code Playgroud)
我不知道为什么你在这个过程中使用动态SQL.这可以在不使用动态SQL的情况下轻松执行:
;WITH CTE AS
(
select COALESCE( PT.[description] , 'Grand Total') AS [Transaction Type],
Sum (AI.PRICE_INC_VAT) AS [AMOUNT (ú) CREDIT],
P.[DESCRIPTION] AS [PRODUCT TYPE]
From [dbo].[T1] C
join [dbo].[T2] S on S.[Customer_ID]=C.[Customer_ID]
join [dbo].[T3] SO on SO.[SITE_ID]=S.[SITE_ID]
join [dbo].[T4] OI on OI.[ORDER_ID]=SO.[SITE_ORDER_ID]
left join [dbo].[T5] P on P.[PRODUCT_ID]=OI.[PRODUCT_ID]
JOIN [dbo].[T6] AI ON AI.ORDER_ITEM_ID = OI.ORDER_ITEM_ID
JOIN [T7] JBAI ON JBAI.ACTION_ITEM_ID = AI.ACTION_ITEM_ID
JOIN T8 JB ON JB.JOB_BATCH_ID = JBAI.JOB_BATCH_ID
JOIN [T9] PA on PA.PAYMENT_ID=JB.PAYMENT_ID
LEFT JOIN [T10] CU ON JB.CUSTOMER_USER_ID = CU.CUSTOMER_USER_ID
JOIN [T11] PT ON PT.PAYMENT_TYPE_ID=PA.PAYMENT_TYPE_ID
LEFT JOIN [T12] ON SU.SYS_USER_ID=JB.SYS_USER_ID
where P.[PRODUCT_CATEGORY_ID]= 'PADS'
and C.COMPANY_ID= '19992'
and PA.DATE_RECEIVED BETWEEN @Startdate AND @Enddate
group by PT.DESCRIPTION, P.DESCRIPTION
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5670 次 |
| 最近记录: |