2010-10-01 18 views
0

De mon application ASP.NET j'appelle une procédure stockée INSERT, il y a une valeur par défaut pour l'une des colonnes de la table dans laquelle la procédure INSERT place les données. Comment puis-je spécifier que je veux que la valeur par défaut soit utilisée à la place? (Ou dois-je spécifier la valeur par défaut réelle dans mes paramètres)valeur de la colonne par défaut de l'utilisateur dans la procédure stockée INSERT

TABLE SITUATIONNELLE:

Column 1: int 
Column 2: string 
Column 3: int default -1 

SITUATIONNELLE Stored Procedure

INSERT INTO TABLE 
    (Column 1, Column 2, Column 3) 
VALUES 
    (?, ?, ?) 

SITUATIONNELLE ASP.NET CODE

create paramter (Column 1, 12) 
if (x = 0) 
{create parameter (Column 2, "test")} 
else 
{ 
    create parameter (Column 3, 24) 
    create parameter (Column 2, DBNull.Value) 
} 

Nous vous remercions de votre aide

Répondre

1

Laissez la colonne hors de la clause insert et vous obtiendrez la valeur par défaut.

Par exemple, dans votre procédure:

IF condition 
    INSERT INTO Y (X) VALUES(1); -- will use defaults 
ELSE 
    INSERT INTO Y (W, X) VALUES(1, 2) -- won't use default for W 
+0

La chose est (désolé oublié de mentionner) que la valeur par défaut peut avoir une autre valeur, tout dépend d'un critère. – mattgcon

+0

@mattgcon, mettez une vérification conditionnelle dans la procédure stockée. – mikerobi

+0

Je pensais à cela, mais y a-t-il un avantage à le faire dans la procédure stockée? – mattgcon

1

Vous pouvez utiliser le mot-clé default.

CREATE TABLE #T 
(
i int default 12, 
j int 
) 

INSERT INTO #T (i,j) VALUES (DEFAULT, 10) 

SELECT i,j FROM #T 
DROP TABLE #T 
+0

ok donc dans mon code ASP.NET quand je crée le paramètre, définissez la valeur comme DEFAULT? Est-ce même dans Intellisense? – mattgcon

+0

Non - Je ne pense pas que vous puissiez définir cela via un paramètre. Cela n'apporterait donc aucun avantage sur la réponse de Mikrobi. Vous auriez toujours besoin d'une logique conditionnelle. –

1

Qu'en est-

if (somecondition) { // User another value for c2 
    query = "insert into table_name (c1, c2) values (1, 2)"; 
} else { // User the column c2 default value 
    query = "insert into table_name (c1) values (1)"; 
}

+0

Des procédures stockées sont requises à des fins de sécurité. Pas de création de requête inline, merci – mattgcon

0

Dans la procédure stockée, vous pouvez définir le paramètre d'avoir une valeur par défaut lui-même, de sorte que si vous laissez ce paramètre de votre code d'application, la procédure remplacera par défaut valeur.

@field_with_def_value int = -1, 
etc... 

Si vous le souhaitez, vous pouvez définir cette valeur par défaut sur la valeur par défaut du champ et l'utiliser. Mais il peut être plus sûr de tester cette valeur par défaut dans le sproc, puis d'appeler conditionnellement un INSERT qui effectue l'insertion avec ou sans la valeur de ce champ. De cette façon si la valeur par défaut est changée, vous n'avez pas besoin de changer votre application ou code sproc