2010-11-18 3 views
0

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

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

Использование 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 

ответ

0

Эта хранимая процедура не должна вставлять 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 и десятичных параметров, а также, а не полагаться на значения по умолчанию.

+0

Итак, проблема заключалась в том, что, когда я получаю значение пустого текстового поля в jquery и передаю его веб-службе с помощью json, json, по-видимому, не передает значение null в webservice. –

Смежные вопросы