2010-11-18 11 views
0

J'ai une procédure stockée qui contient un ensemble de paramètres. Ils ne contiendront jamais tous des valeurs, certains seront nuls. Comment ignorer ces instructions d'insertion si les paramètres sont NULL? L'utilisation de firebug pour firefox m'indique que mes colonnes de base de données ne peuvent pas contenir de null, c'est pourquoi je crois que j'ai codé incorrectement cette procédure stockée (j'utilise jQuery ajax et un service web pour communiquer avec cette procédure stockée).Ignorer les instructions basées sur des paramètres null dans une procédure stockée

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 

Répondre

0

Cette procédure stockée ne doit pas essayer d'insérer NULL dans une table. Vos instructions IF préviennent cela. Êtes-vous sûr que le message d'erreur ne vous dit pas que les paramètres ne peuvent pas être NULL? Si oui, la façon de le corriger est juste de donner les paramètres des valeurs par défaut:

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> 

Je voudrais aussi suggèrent de déclarer explicitement la taille de tous vos varchar et paramètres décimaux ainsi, plutôt que de compter sur les valeurs par défaut.

+0

Ainsi, le problème est que lorsque j'obtiens la valeur d'une zone de texte vierge dans jquery et que je la passe à mon service web en utilisant json, json ne transmet apparemment pas de valeur nulle au service web. –