Est-il possible de forcer une colonne dans une table SQL Server 2005 à une certaine valeur sans tenir compte de la valeur utilisée dans une instruction d'insertion ou de mise à jour? Fondamentalement, il y a un bogue dans une application à laquelle je n'ai pas accès et qui tente d'insérer une date du 1/1/0001 dans une colonne datetime. Cela génère une exception de dépassement SqlDateTime. Puisque cette colonne n'est même pas utilisée pour quelque chose, j'aimerais mettre à jour les contraintes sur les colonnes ou quelque chose dans la base de données pour éviter l'erreur. Ceci est évidemment juste un patch d'urgence temporaire pour éviter le problème ... Idées bienvenues ...Forcer la colonne SQL Server à une valeur spécifique
Répondre
Si c'est une application tierce alors je vais supposer que vous n'avez pas accès à la procédure stockée, ou logique utilisé pour générer et insérer cette valeur (il est toujours utile de vérifier les SP pour la base de données de l'application, pour voir si vous pouvez les modifier). Comme Charles l'a suggéré, si n'avez pas ont accès à la source, alors vous devez avoir un déclencheur sur l'insertion.
L'article Microsoft here vous donnera des informations détaillées sur la création de déclencheurs. Cependant, SQL Server n'a pas de véritable déclencheur 'before insert' (à ma connaissance), vous devez donc essayer INSTEAD OF. Jetez un oeil here pour plus d'informations. Dans cet article, payer note en particulier de l'article 37.7, et l'exemple suivant (à nouveau de cet article):
CREATE TRIGGER T_InsertInventory ON CurrentInventory
INSTEAD OF INSERT AS
BEGIN
INSERT INTO Inventory (PartNumber, Description, QtyOnOrder, QtyInStock)
SELECT PartNumber, Description, QtyOnOrder, QtyInStock
FROM inserted
END
Nick.
Comment insérer le montant? Si c'est à travers un proc stocké ... vous pouvez simplement modifier le Sproc pour ignorer ce paramètre d'entrée.
si elle est par côté client SQL généré, ou un outil ORM, Otoh, puis afaik, la seule option est un « avant » Trigger qui « remplace » la valeur avec un un acceptable ...
D'accord. Jetez un oeil à INSTEAD OF TRIGGER. – MarlonRibunal
la le hack le plus simple serait d'en faire un varchar, et de l'insérer comme une ficelle dans la colonne. La réponse la plus compliquée est, vous pouvez masser les données avec un déclencheur, mais il devrait encore être valide en premier lieu. Par exemple, je peux réinitialiser une valeur de champs dans un déclencheur de mise à jour/insertion, mais il faudrait tout d'abord passer à travers l'insertion.
Je crée un trigger pour vérifier et modifier la valeur
Si vous utilisez SQL 2005, vous pouvez créer un déclencheur INSTEAD OF. Le code de ce déclencheur wil courir à la place de l'insert d'origine/mise à jour
-Edoode
- 1. valeur par défaut de travail lors de l'ajout colonne à la table - SQL Server
- 2. Comment forcer MS SQL Server à effectuer une jointure d'index?
- 3. Référence SQL Server une colonne calculée
- 4. SQL Server: colonne incohérence
- 5. Relations de colonne SQL Server
- 6. Sql Server: SQl total de la colonne Query
- 7. Comment écrire sql pour définir la valeur par défaut d'une colonne dans sql server 2005?
- 8. ASP.NET Datagrid - masquer une ligne/colonne spécifique
- 9. Requête pour lister toutes les tables contenant une colonne spécifique avec SQL Server 2005
- 10. lignes SQL sélection où une valeur de colonne est commune à une autre colonne de critères
- 11. Augmenter la valeur d'une colonne d'identité dans SQL Server sans supprimer et recréer la table
- 12. Liez une valeur par défaut de la colonne à une fonction dans SQL 2005
- 13. Sélectionnez une colonne factice avec une valeur factice dans SQL?
- 14. SQL Server 2005: comment ajouter une colonne à une table au début de la table?
- 15. SQL Server: trier une colonne numériquement si possible, sinon alpha
- 16. Plage de temps spécifique dans la requête SQL Server
- 17. Puis-je forcer certains paramètres par utilisateur dans SQL Server?
- 18. Définition de la valeur maximale d'une colonne d'identité dans SQL SERVER 2005
- 19. SQL Server: Copie de la colonne dans la table
- 20. Obtenir la "version" spécifique d'une colonne
- 21. Incrémentation de la colonne int dans la table MS SQL Server via SP
- 22. SQL Server obtenir des résultats où la valeur est nulle
- 23. Meilleur moyen de rechercher la valeur par défaut d'une colonne dans Sql Server
- 24. Insérer Max Valeur de la colonne dans une autre colonne
- 25. SQL UPDATE SET une colonne doit être égale à une valeur dans une table liée référencée par une colonne différente?
- 26. Résultat de la colonne calculée SQL Server 2005 à partir de l'agrégation de la valeur d'un autre champ de table
- 27. Comment mettre à jour une chaîne XML dans une colonne ntext dans SQL Server?
- 28. Générer une valeur de colonne comme CSV T-SQL 2000
- 29. Définir une valeur de retour de SP à une variable dans SQL Server
- 30. Forcer TargetControl Textbox à utiliser une valeur dans AutocompleteExtender
Merci pour l'exemple précis, c'est exactement ce dont j'ai besoin. –