Envoyer un vide valeur de type DateTime dans la procédure stockée SQL. Mais pas null

J'ai une procédure stockée SQL qui accepte un DateTime paramètre qui a une valeur par défaut NULL

@pmNext_Check_Date DATETIME=NULL

Je veux utiliser ce paramètre dans les 3 scénarios:

  1. Si elle est NULL alors ne pas mettre à jour tous les enregistrements
  2. Si elle a une valeur de date, puis mettre à jour tous mes enregistrements spécifiés dans ma clause where
  3. Le problème! Définir tous les champs de date dans ma requête à NULL pour les enregistrements dans ma clause where.

Ici est le bloc de code au sein de la SP qui pose moi des questions (le reste de l'instruction de mise à JOUR est en construire ailleurs dans le SP et fonctionne très bien):

IF @pmNext_Check_Date IS NOT NULL
    IF @pmNext_Check_Date ='' --This is the bit that is causing me a problem. I just need to check for a empty date
        SET @sql = @sql + ' Next_Check_Date = NULL '
    ELSE
        SET @sql = @sql + ' Next_Check_Date = @pmNext_Check_Date '                    

SET @sql = @sql + ' WHERE ID IN (1, 2)'

Donc par exemple si j'ai les 2 rangs:

ID NextCheckDate

1 12/12/12

2 NULL

Dans le scénario 1, je ne le passez pas le paramètre de la procédure utilise la valeur par défaut et pas de dates seront mises à jour.

Dans le scénario 2, je passe à une valeur de date et jour à la fois les lignes avec la valeur de la date

Dans le scénario 3 je veux mettre à jour la valeur de la date sur mes lignes à null. La différence entre le scénario 1 & 3-dans le scénario 3, l'utilisateur aura le choix pour définir les valeurs de la date à null.

J'ai donc voulu passer à une date vide dans la procédure stockée. Je suis en train de faire cela à partir de C# et aimerais faire quelque chose comme ce qui suit:

SqlParameter param = new SqlParameter("@pmNext_Check_Date", "");                            

Cela échoue car le PS s'attend à un DateTime.

Donc, je veux être en mesure de passer à une date vide et aussi comment puis-je vérifier cela à l'intérieur de la SP. La présente vérification qui est ci-dessous ne fonctionne pas:

IF @pmNext_Check_Date =''

Merci à l'avance.
Espérons que tout cela fait sens.
Je suis à l'aide de C#4.0 et SQL 2008

  • Je suppose que vous avez essayé de l'envoyer dans DBNull.Value, droit?
  • Oui, j'ai essayé. C'est juste le même que l'utilisation de la valeur par défaut
  • vous pouvez essayer d'envoyer mindate ou maxdate et de la lecture que dans votre SP
  • Je voudrais un vide date de valeur, comme " à qui j'ai pu vérifier dans mon SP. Donc un peu comme une chaîne Null est différent d'une chaîne vide. Je ne vais pas être d'insérer " dans la base de données. Je veux vérifier que la valeur puis insérer la valeur null.
  • Je pourrais envoyer min/max des dates, mais j'essayais de le faire d'une façon plus soignée vraiment. Aussi le min/max la date pourrait être à l'extérieur de la configuration de SQL gamme
  • Donc, vous voulez deux "non date" (valeurs null et vide). Pourquoi pensez-vous que c'est possible?
  • Il est possible de faire sur une chaîne. Et je ne pense pas que c'est possible, j'ai demandé si quelqu'un savait si il était possible ou si il était intelligent et de travail autour de
  • Sauf si vous travaillez avec une édition de SQL Server, je n'ai jamais entendu parler, il n'y a pas de coûts additionnels pour ajouter un autre paramètre (si vous êtes à aucune limite sur le nombre de paramètres ont permis, vous avez d'autres questions). Ajoutez simplement de l'autre, le bien nommé, le paramètre de la procédure.

InformationsquelleAutor Sun | 2013-01-22