我在SQL Server中有以下存盤程序:
CREATE PROCEDURE [PROC_SET_BRN_RPT_STSTC]
@I_RPT_I varchar(max)。
@I_MSTR_TBL varchar(max)
AS(max)
BEGIN(max)
DECLARE[/span
@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'/span>;
/*vd_pstg_d := GET_DATE ('TDT');*/.
SELECT @VD_PSTG_D = max(TIME_DIMN.DATE_D)
FROM TIME_DIMN
WHERE TIME_DIMN.TME_DIMN_I IN ( 'TDTD'/span>, 'TDSH'/span> ) 。
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;
當我試圖執行存盤程序時,我得到了以下錯誤:
':'附近的語法不正確。
你知道問題出在哪里嗎?
uj5u.com熱心網友回復:
正如你的問題的評論中所指出的,在這個存盤程序中沒有必要使用動態SQL。你可以直接重寫它:
CREATE PROCEDURE [PROC_SET_BRN_RPT_STSTC]
@I_RPT_I varchar(max)。
@I_MSTR_TBL varchar(max)
AS(max)
BEGIN(max)
DECLARE[/span
@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'/span>;
/*vd_pstg_d := GET_DATE ('TDT');*/.
SELECT @VD_PSTG_D = max(TIME_DIMN.DATE_D)
FROM TIME_DIMN
WHERE TIME_DIMN.TME_DIMN_I IN ( 'TDTD'/span>, 'TDSH'/span> ) 。
DELETE FROM RPT_STSTC
WHERE TXN_PSTG_D = @vd_pstg_d AND Rpt_i = @I_Rpt_I;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
只有在你絕對需要使用sp_executesql時才使用,在這里你不需要它。
為了回答你的問題,你可以這樣做(但在這個簡單的情況下不建議這樣做):
CREATE PROCEDURE [PROC_SET_BRN_RPT_STSTC]
@I_RPT_I varchar(max)。
@I_MSTR_TBL varchar(max)
AS(max)
BEGIN(max)
DECLARE[/span
@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'/span>;
/*vd_pstg_d := GET_DATE ('TDT');*/.
SELECT @VD_PSTG_D = max(TIME_DIMN.DATE_D)
FROM TIME_DIMN
WHERE TIME_DIMN.TME_DIMN_I IN ( 'TDTD'/span>, 'TDSH'/span> ) 。
DECLARE @SQLString NVARCHAR(500)。
SET @SQLString = CONCAT('Delete From RPT_STSTC Where TXN_PSTG_D =''/span>, @VD_PSTG_D, '' AND Rpt_i='', @I_RPT_I, '''')。)
Execute sp_executesql @SQLString, @vd_pstg_d, @I_Rpt_I;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
uj5u.com熱心網友回復:
:1和:2是問題所在。
你想在那里填充變數,但這是錯誤的方法。你需要使用那里的變數,而不能像其他語言那樣使用占位符。
SET @SQLString = 'Delete From RPT_STSTC Where TXN_PSTG_D = @vd_pstg_d and Rpt_i = @I_Rpt_I'。
T-SQL中不存在帶有:1和:2的語法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/314530.html
標籤:
上一篇:回圈一個ibble需要太多時間
下一篇:去掉字符左邊和右邊的詞
