2009-10-08 3 views
1

Comme le dit la question, à quoi dois-je attribuer la valeur d'un paramètre si je ne veux pas qu'il mette à jour la base de données?Que doit être un paramètre SQL dans une instruction de mise à jour quand ce n'est pas nécessaire

par exemple.

UPDATE table1 
SET col1 = @someval , 
    col2 = @someotherval 
WHERE col3 = 1; 

Si dans mon C# logique je décide que col2 n'a pas besoin d'être mis à jour, car la valeur étant transmis est nul, que dois-je définir la valeur des paramètres afin qu'il ne met pas à jour cette colonne?

Je dois utiliser des requêtes paramétrées et je ne veux pas modifier l'instruction de mise à jour d'origine.

Répondre

4

Si col2 ne peut jamais être mis à jour NULL, essayez cette

update table1 
set col1 = @someval , col2 = ISNULL(@someotherval, col2) 
where col3 = 1; 
2

Définissez le paramètre pour col2 comme étant ce qui est actuellement. Pour avoir pris la décision au sein de C#, vous devez savoir ce que je pense ou alors vous devez l'obtenir en premier.

C'est l'une des principales attractions d'utiliser un ORM comme NHibernate qui s'occupe de ces problèmes pour vous.

0

Si vous ne voulez pas qu'une valeur soit mise à jour, la seule façon est de la supprimer complètement de l'instruction SQL. Il n'y a aucune valeur qui fait ce dont vous avez besoin, vous devez avoir des déclarations différentes pour cela.

La seule alternative à cette question est interroge la valeur actuelle de la DB et installe une nouvelle fois cette valeur, qui est au moins laid ...

1

Vous pouvez utiliser soudent() qui est la norme ANSI (ISNULL est pas), mais changeriez votre déclaration de mise à jour légèrement, par exemple:

update table1 
    set col1 = coalesce(@someval, col1), 
     col2 = @someotherval 
where col3 = 1; 

Ceci mettre à jour à ce qu'il est pr Éventuellement.

0

Vous pouvez essayer ...

UPDATE table1 
SET  col1 = @someval, 
     col2 = ISNULL(@someotherval, col2) 
WHERE col3 = 1; 

Ce ne sera pas à jour la colonne si vous passez nulle, il ne vous empêche cependant de fixer la colonne null qui peut ou peut ne pas être ok.

1

Si vous ne souhaitez pas mettre à jour la valeur de la colonne, vous devez la supprimer de votre requête de mise à jour, en utilisant StringBuilder pour filtrer les conditions.

Ou vous pourriez essayer de regarder:

public SqlParameter Add(
string parameterName, 
SqlDbType sqlDbType, 
int size, 
string sourceColumn 
); 

Ce que je pense, pourrait effectivement tirer la valeur de la source. Ainsi, définir la valeur à la valeur précédente. Vous devrez peut-être changer la direction du paramètre pour être à la fois Entrée et Sortie.

Questions connexes