2

INSERTこれは、ストアド プロシージャで使用したいシナリオです。

テーブル:

tblRate

  • RateID (ピーク)
  • お金を評価する
  • 日 int
  • isDailyRate ビット

tbl予約

  • 合計金額

私のvbアプリでは、これがステートメントです。これを T-SQL に変換するにはどうすればよいでしょうか。

 if !isDaily = True then
      !Totals = (!Days * !Rate)
 else
      !Totals = !Rate
 end if

これは私のストアドプロシージャです:

Create PROCEDURE [dbo].[sp_tblBooking_Add] 
   (
    @RateID     bigint,
    @Rate       money,
    @Days       int,
    @CheckOUT   datetime
   )
AS
BEGIN
    --Below is the logic I want. I can't get the right syntax

    --Declare @myTotals as money
    --Declare @myCheckOut as DateTime

    --if (Select isDailyRate FROM tblRates WHERE (RateID = @RateID)) = True THEN
    --  set myTotals = (@Rate * @Days)
    --  set @CheckOUT   = DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) + @Days, '12:00') 
    --Else
    --  set myTotals = @Rate
    --  set @CheckOUT   = GETDATE()

    --End if

    INSERT INTO tblBooking(Totals, CheckOUT)
    VALUES(@myTotals, @myCheckOut); 
END
4

1 に答える 1

2

CASE次の式を使用します。

INSERT INTO tblBooking (Totals, CheckOUT)
SELECT 
  CASE 
    WHEN idDailyRate = 1 THEN @Rate * @Days 
    ELSE @rate 
  END,
  CASE 
    WHEN idDailyRate = 1 THEN DATEADD(DAY, 
                                      DATEDIFF(DAY, 0, GETDATE()) + @Days, 
                                      '12:00')
    ELSE GETDATE()
  END
FROM tblRates 
WHERE RateID = @RateID;

または、それらがスカラー値の場合は、それらを変数に選択して、代わりに挿入できますINSERT ... INTO ... SELECT


更新 1

このような:

Declare @myTotals as money;
Declare @myCheckOut as DateTime;

SELECT 
  @myTotals = CASE 
                WHEN idDailyRate = 1 THEN @Rate * @Days 
                ELSE @rate 
              END,
  @myCheckOut = CASE 
                  WHEN idDailyRate = 1 THEN DATEADD(DAY, 
                                                    DATEDIFF(DAY, 0, GETDATE()) + @Days, 
                                                    '12:00')
                  ELSE GETDATE()
                END
FROM tblRates 
WHERE RateID = @RateID;

INSERT INTO tblBooking (Totals, CheckOUT) VALUES(@myTotals, @myCheckOut ); 

ただし、このテーブルtblRatesからそれらの変数に返される値よりも多くの値がある場合、これはエラーになります。

于 2013-02-17T07:17:27.327 に答える