【发布时间】:2021-10-25 23:26:54
【问题描述】:
我在 SQL Server 中有以下存储过程:
CREATE PROCEDURE [PROC_SET_BRN_RPT_STSTC]
@I_RPT_I varchar(max),
@I_MSTR_TBL varchar(max)
AS
BEGIN
DECLARE
@VD_PSTG_D datetime2(0),
@V_SQL varchar(4000),
@BMG_RPT_I varchar(5) = ISNULL(@I_RPT_I, '') + 'M',
@MAM_RPT_I varchar(5) = ISNULL(@I_RPT_I, '') + 'P';
/*vd_pstg_d := GET_DATE ('TDTD');*/
SELECT @VD_PSTG_D = max(TIME_DIMN.DATE_D)
FROM TIME_DIMN
WHERE TIME_DIMN.TME_DIMN_I IN ( 'TDTD', 'TDSH' );
DECLARE @SQLString NVARCHAR(500);
SET @SQLString = 'Delete From RPT_STSTC Where TXN_PSTG_D = :1 and Rpt_i = :2';
Execute sp_executesql @SQLString, @vd_pstg_d, @I_Rpt_I;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
当我尝试执行存储过程时,出现以下错误:
':' 附近的语法不正确。
你知道会是什么问题吗?
【问题讨论】:
-
SQL Server 使用命名参数,所以需要
Where TXN_PSTG_D = @vd_pstg_d and Rpt_i = @I_Rpt_I。不清楚为什么需要动态 SQL,这可以作为普通的DELETE -
仅供参考的程序不需要包含在 BEGIN..END 中
标签: sql sql-server tsql sql-server-2008 stored-procedures