我使用获得日期的SP作为参数,我试图在查询中使用变体,但SQL似乎没有“看到”它
alter procedure PipeReport
@1 as DATE
as
begin
DECLARE @SqlCD NVARCHAR(MAX)
DECLARE @Thickness NVARCHAR(100)
--DECLARE @SlpCode INT
SET @SqlCD = N'
/* SELECT FROM [dbo].[ORDR] T2 */
declare @1 as DATE
SELECT C0.DocNum ,OI.ItemName'
/* הנתונים שעליהם רצה הלולאה */
DECLARE SizeList CURSOR FOR
SELECT
cast( R1.U_Thickness as nvarchar)--+''/''
FROM
RDR1 R1
INNER JOIN ORDR R ON R1.DocEntry = R.DocEntry
WHERE
R.U_ImpDate=@1
and
R1.[U_Shelf] is null
and
R1.[LineStatus]=N'O'
GROUP BY
U_Thickness
HAVING
R1.U_Thickness IS NOT NULL
AND
R1.U_Thickness > 0
OPEN SizeList
FETCH NEXT FROM SizeList INTO @Thickness
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Thickness = ( SELECT TOP 1 U_Thickness FROM RDR1 WHERE U_Thickness = @Thickness)
SET @SqlCD = @SqlCD + ',SUM( CASE WHEN T0.U_Thickness = ' + CONVERT(NVARCHAR(10),@Thickness) + N' THEN T0.Quantity END) AS N'' ' + @Thickness + N''' '
FETCH NEXT FROM SizeList INTO @Thickness
END
SET @SqlCD = @SqlCD + N' FROM
RDR1 T0
INNER JOIN ORDR C0 ON C0.DocEntry = T0.DocEntry
INNER JOIN OITM OI ON t0.ItemCode = OI.ItemCode
where
C0.U_ImpDate = @1
AND
T0.[U_Thickness] <>0
and
T0.[U_Shelf] is null
and
OI.U_Group=400
and
T0.[LineStatus]=N''O''
AND C0.DocNum IS NOT NULL
Group BY ROLLUP(C0.DocNum),OI.ItemName
ORDER BY 1 DESC; '
CLOSE SizeList
DEALLOCATE SizeList
EXEC(@SqlCD)
end
发布于 2021-06-10 08:54:56
变量或参数仅在声明的范围内可见。参数@1
在过程主体中是可见的,但在生成和执行过程的动态脚本中是不可见的。即使动态脚本声明的变量的名称和类型相同,@1
参数的值也不会自动传递给它。
如果您想传递它,请使用EXEC sp_executesql <your query>
而不是EXEC(<your query>)
来运行动态SQL,因为前者允许您使用适当的参数化。在您的具体案例中,您需要做的是:
declare @1 as DATE
行。EXEC(@SqlCD)
行替换为: EXEC sp_executesql @SqlCD,N'@1 DATE',@1;https://dba.stackexchange.com/questions/294056
复制相似问题