我有 2 列 CarId int、主键和 CarName、varchar 的简单表。
我需要创建一个接受汽车列表的存储过程。如果汽车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
存储过程中的参数)。
或者这个问题的一些优雅的解决方案。