2

私はこの手順を持っていますが、出力パラメーター @bit を設定している 2 つの if なしで、完全に機能する場合。proc p3を実行しようとすると、次のエラーが発生します

Must declare the scalar variable "@bit".

ここにコードがあります

create proc p3 @codP int, @codM int, @dela datetime, @panala datetime, @pret smallint, @bit bit output
as
begin
    declare @val smallint
    set @val = (select COUNT(*)
                from OferteSpeciale as OS
                where OS.codP = @codP and OS.codM = @codM and 
                        ((@panala >= OS.dela and @panala <= OS.panala)
                        or (@dela >= OS.dela and @dela <= OS.panala) or
                        (@dela <= OS.dela and @panala >= OS.panala)))
    print @val
    if (@val = 0)
        begin
            insert into OferteSpeciale (codP,codM,dela,panala,pret) values (@codP,@codM,@dela,@panala,@pret)
            declare @others smallint
            set @others = (select COUNT(*)
                         from Cataloage as c, OferteSpeciale as os
                         where ((c.codM = @codM and c.codP = @codP and c.pret < @pret) or
                            (os.codM = @codM and os.codP = @codP and os.pret < @pret)))
            if (@others > 0)
              set @bit = 0
            else
              set @bit = 1
        end
    else
      RAISERROR 50001 'There is already a special offer for that product, in that shop, between that dates'
end
declare @bit bit
exec p3 1, 3, '2013-04-15', '2013-04-15', 25, @bit output
4

1 に答える 1

2

簡単な答えとして、ストアド プロシージャを宣言した後に「GO」がありません。指定したとおりに実行しようとすると、実行から宣言を分割するために GO を追加すると別のエラーが発生します。

end
GO
declare @bit bit
exec p3 1, 3, '2013-04-15', '2013-04-15', 25, @bit output

DBにこれらのオブジェクトがないため、明らかにストアドプロシージャの内容を削除する必要がありましたが、問題は「@Bit」にあるようです

于 2013-04-02T15:58:42.757 に答える