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
ストアド プロシージャのパラメーター)。
または、この問題に対するいくつかのエレガントなソリューション。