1

以下の動的SQLを実行しようとすると、現在次のエラーが表示されます。このエラーがスローされる原因となっている何かが欠けていますか? ....

メッセージ 102、レベル 15、状態 1、手続き計算、行 32 ')' 付近の構文が正しくありません。

    CREATE PROCEDURE calc(@pC INT, @Array1 varchar(500) ,@pT VARCHAR(15), @pTN VARCHAR(15), @pPK BIGINT, @pCI FLOAT, @pFK BIGINT)
        AS 
        BEGIN
        --calculate peer statistics for level of peer group   
        DECLARE @sMI FLOAT, @num25 FLOAT, @num75 FLOAT, @num25V FLOAT, @num75V FLOAT
        DECLARE @sMD FLOAT, @sME FLOAT, @sIQ FLOAT, @sSD FLOAT, @sMin FLOAT, @sMax FLOAT, @sDiff FLOAT
        DECLARE @sLK BIGINT, @sNL BIGINT, @sNI BIGINT
        DECLARE @sUNC NVARCHAR(5)
        DECLARE @SQL NVARCHAR(MAX)


SET @SQL =  'IF ('+@pFK+' = 0) 
                BEGIN
                    INSERT INTO '+@pTN+' (fldBA) VALUES (2); 
                END
            ELSE  
                BEGIN  
                    IF ((SELECT COUNT(*) FROM '+@pTN+' WHERE fldFPK = '+@pFK+' and fldPK='+@pPK+' and fldCIA='+@pCI+') > 0)
                        BEGIN           
                            UPDATE '+@pTN+' SET fldAVA = 0, fldPK = '+@pPK+', fldDTA = GETDATE(), fldCIA = '+@pCI+',
                            fldME = '+@sME+',fldMD = '+@sMD+',fldIQ = '+@sIQ+',fldSD = '+@sSD+', fldND = '+@pC+' + 1,
                            fldNI = '+@sNI+', fldNL = '+@sNL+', fldMin = '+@sMin+', fldMax = '+@sMax+',fldUNC = '+@sUNC+'
                            WHERE fldFPK = '+@pFK+' and fldPK = '+@pPK+' and fldCIAc = '+@pCI+'
                        END
                    ELSE
                        BEGIN               
                            INSERT INTO '+@pTN+' (fldFPK, fldAVA, fldPK, fldDTA, fldCIA,fldMean,fldMD,fldIQ,fldSD,fldND,fldNI,fldNL,fldMin,fldMax,fldUNC) VALUES('+@pFK+', 0, '+@pPK+', GETDATE(), 
                            '+@pCI+', '+@sME+', '+@sMD+','+@sIQ+','+@sSD+','+@pC+'+ 1, '+@sNI+', '+@sNL+', '+@sMin+', '+@sMax+', '+@sUNC+')
                        END
                END'

exec @SQL
4

1 に答える 1

3

手順をコピーして SQL Server Management Studio に貼り付けました。構文エラーはありません。ステートメントを で始めたので、ステートメントCREATE PROCEDUREを で閉じる必要があります。この方法でそれを行うことができます:ENDBEGIN

CREATE PROCEDURE calc(@pC INT, @Array1 varchar(500) ,@pT VARCHAR(15), @pTN VARCHAR(15), @pPK BIGINT, @pCI FLOAT, @pFK BIGINT)
    AS 
    BEGIN

    /* BODY OF PROCEDURE */

    SET @SQL = ''

    EXEC @SQL

    END 
于 2013-11-06T13:42:14.157 に答える