3

CarId int、主キー、CarName、varchar の 2 つの列を持つ単純なテーブルがあります。

車のリストを受け入れるストアド プロシージャを作成する必要があります。の車がCarId存在しない場合はその車を挿入し、既に存在する場合は更新します。

ユーザー定義のテーブル タイプを作成しましたCarType

CREATE TYPE dbo.CarType
AS TABLE
(
    CARID int null,
    CARNAME varchar(800) not null,
);

およびストアド プロシージャInsertCars:

CREATE PROCEDURE dbo.InsertCars
    @Cars AS CarType READONLY
AS
    DECLARE @CarCount INT = 0;
    DECLARE @Counter INT = 0;
BEGIN
    SET @CarsCount = (SELECT COUNT(CarId) FROM @Cars);

    WHILE(@Counter < @CarsCount)    
        BEGIN TRY
            --how get item from list Cars?
            @CurrentCar = Cars(@Counter)

            IF EXISTS(SELECT 1 FROM Cars WHERE CarsId = CurrentCar.CarId)
                --if doesn’t exist insert
                BEGIN
                    INSERT INTO CARS(CARID, CARNAME)
                    SELECT * FROM @CurrentCar;
                END

             ELSE
                BEGIN
                    --if exist update
                END
             END

            SET @Counter= @Counter + 1; 
        END TRY

        BEGIN  CATCH
            Print (ERROR_MESSAGE());
        END CATCH
END

車のリストからループ内の現在の車を取得する方法がわかりません (Carsストアド プロシージャのパラメーター)。

または、この問題に対するいくつかのエレガントなソリューション。

4

1 に答える 1