0

これは、ヒット > 0 の場合、SQL サーバーが false を返し、テーブルを更新するシナリオです。構文に問題があります。

Create PROCEDURE [dbo].[sp_CheckTransactionExist_TransID]

@TransID int

AS

Declare @Hits bit
Declare @Hit bigint

SET @Hit = 0


Select @Hit = @Hit + count(1)  From tblBooking Where (TransID = @TransID)
Select @Hit = @Hit + count(1)  From tblOrders Where (TransID = @TransID) 
Select @Hit = @Hit + count(1)  From tblTransaction_DP Where (TransID = @TransID)


if @Hit > 0 then
    begin
        @Hits = True
    end
else
    begin
        @Hits = False
        update tblTransaction set isVoid = 1 where (Transid = @TransID)
    end

Select @Hits

これらのエラーがあります: キーワードの近くの構文が正しくありません。

4

2 に答える 2

1

ボディ全体を次のものに置き換えることができます。

if exists(select * from tblBooking Where TransID = @TransID)
  or exists(select * from tblOrders where TransID = @TransID)
  or exists(select * from tblTransaction_DP Where TransID = @TransID)
begin
    select 1
end
else
begin
    update tblTransaction set isVoid = 1 where (Transid = @TransID)
    select 0
end

ノート:

  • が存在するかどうかだけが重要な場合は、行数を数えないでください。
  • thenT-SQL のステートメントにはありませんif
  • SQL Server にはブールtrueがないため、またはのようなブール型リテラルはありませんfalse
  • sp_ストアド プロシージャに;で始まる名前を付けないでください。このプレフィックスは、Microsoft のシステムプロシージャ用に予約されています。MS があなたのシステム プロシージャと同じ名前のシステム プロシージャをデータベースに追加すると、そのシステム プロシージャがあなたのシステム プロシージャの代わりに使用されます。master

プロシージャ名に接頭辞sp_を使用しないことを強くお勧めします。このプレフィックスは、システム ストアド プロシージャを指定するために SQL Server によって使用されます。詳細については、ストアド プロシージャの作成 (データベース エンジン)を参照してください。

  • 戻り値のデータ型が問題になる場合は、 、 および に置き換えることselect 0select CONVERT(bit,0)できselect 1ますselect CONVERT(bit,1)。ビット リテラルを指定する省略形はありません。
  • 変数の値を設定する場合は、SETステートメント (またはSELECT) を使用する必要があります。変数に代入することはできません。
于 2013-05-17T06:57:41.317 に答える