Игнорирование операторов на основе нулевых параметров в хранимой процедуре - PullRequest
0 голосов
/ 18 ноября 2010

У меня есть хранимая процедура, которая содержит множество параметров.Все они никогда не будут содержать значений, некоторые будут нулевыми.

Как мне игнорировать эти операторы вставки, если параметры нулевые?

Используя firebug для firefox, он говорит мне, что мои столбцы базы данныхне содержат пустых значений, поэтому я считаю, что я неправильно закодировал эту хранимую процедуру (я использую jQuery ajax и веб-сервис для связи с этой хранимой процедурой).

ALTER PROCEDURE dbo.Vehicle_InsertAll
    @Make  varchar,
    @Model  varchar,
    @SubModel varchar,
    @Liter decimal,
    @Cylinder varchar,
    @Fuel varchar,
    @FuelDel varchar,
    @Asp varchar,
    @EngDesg varchar
AS
IF @Make IS NOT NULL
BEGIN
    INSERT INTO VehicleMakes (VehicleMake) VALUES(@Make)
    END
    IF @Model IS NOT NULL
    BEGIN
    INSERT INTO VehicleModels (Name) VALUES(@Model)
    END
    IF @SubModel IS NOT NULL
    BEGIN
    INSERT INTO VehicleSubModels (Name) VALUES(@SubModel)
    END
    IF @Liter IS NOT NULL
    BEGIN
    INSERT INTO VehicleLiters (Liters) VALUES(@Liter)
    END
    IF @Cylinder IS NOT NULL
    BEGIN
    INSERT INTO VehicleCylinders (Cylinders) VALUES(@Cylinder)
    END
    IF @Fuel IS NOT NULL
    BEGIN
    INSERT INTO VehicleFuel (FuelType) VALUES (@Fuel)
    END
    IF @FuelDel IS NOT NULL
    BEGIN
    INSERT INTO VehicleFuelDelivery (Delivery) VALUES (@FuelDel)
    END
    IF @Asp IS NOT NULL
    BEGIN
    INSERT INTO VehicleAspiration (Asp) VALUES (@Asp)
    END
    IF @EngDesg IS NOT NULL
    BEGIN
    INSERT INTO VehicleEngDesg (Designation) VALUES (@EngDesg)
    END

    RETURN

1 Ответ

0 голосов
/ 18 ноября 2010

Эта хранимая процедура не должна пытаться вставить NULL s в любую таблицу.Ваши IF заявления мешают этому.Вы уверены, что сообщение об ошибке не говорит о том, что параметры не могут быть NULL?Если это так, способ исправить это просто дать значения параметров по умолчанию:

ALTER PROCEDURE dbo.Vehicle_InsertAll
    @Make  varchar = null,
    @Model  varchar = null,
    @SubModel varchar = null,
    @Liter decimal = null,
    @Cylinder varchar = null,
    @Fuel varchar = null,
    @FuelDel varchar = null,
    @Asp varchar = null,
    @EngDesg varchar = null
AS
<Stored Procedure Statements>

Я бы также предложил явно объявить размер всех ваших varchar и десятичных параметров, а не полагаться напо умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...