2010-12-03 2 views
0

Dans ma table de base de données SQL Server 2K, il existe un champ de code postal varchar qui affiche la longueur de caractère incorrecte du code postal lorsqu'il encode un code postal avec des traits d'union numériques. Par exemple, pour les valeurs telles que ABC12-1234, elle émettrait une longueur correcte, c'est-à-dire 10, mais lorsque le code postal est quelque chose comme 21345-5, elle émet sa longueur à 5 au lieu de 7. Je me demande comment éviter cette typographie implicite. Des idées?Le catalogage implicite observé dans SQL Server 2000

+0

Comment obtenez-vous cette valeur de longueur? –

+0

Ce que je perçois est que tandis que les champs de code postal encouters quelque chose comme ABC12-1234 il traite est comme chaîne de caractères et émet une longueur correcte ie 10 au contraire quand le champ a la valeur 21345-5 il calcule en interne à 21340 et sort la longueur 5. J'espère que je pourrais répondre à votre question. – Yatin

+0

En d'autres termes, je peux insérer le code postal dis 21345-5 (sans guillemets simples) au champ de code postal de type de varchar et c'est ce que je veux éviter. Si la structure de la table est quelque chose comme mytable (code postal varchar (10)) alors insérer dans les valeurs mytable (12345-5) devrait renvoyer une erreur pour type-mismatch, ce qui n'est pas le cas. – Yatin

Répondre

0

Je ne semblent reproduire ce - cet extrait fonctionne parfaitement sur SQL Server 2000:

CREATE TABLE ZipCodeTest(ID INT IDENTITY PRIMARY KEY, ZipCode VARCHAR(20)) 

INSERT INTO dbo.ZipCodeTest(ZipCode) VALUES('ABC12-1234') 
INSERT INTO dbo.ZipCodeTest(ZipCode) VALUES('21345-5') 
INSERT INTO dbo.ZipCodeTest(ZipCode) VALUES('ABC') 
INSERT INTO dbo.ZipCodeTest(ZipCode) VALUES('32144') 

Puis-je faire un SELECT sur cette table:

SELECT 
    ID, ZipCode, LEN(ZipCode) 
FROM 
    ZipCodeTest 

et obtenir la sortie suivante :

ID ZipCode  LEN   
1 ABC12-1234 10 
2 21345-5  7 
3 ABC   3 
4 32144   5 

Votre "cas de problème" (avec ID = 2) montre LEN(ZipCode) = 7 comme prévu.

Pouvez-vous nous montrer

  • structure de votre table
  • votre instruction SELECT qui renvoie les informations de longueur erronée ??
2

Donc, votre plainte est que si quelqu'un fait

INSERT INTO YourTable(ZipCode) VALUES(21345-5) 

-à-dire qu'ils omettent les citations qu'il se traité comme

INSERT INTO YourTable(ZipCode) VALUES(21340) 

et que vous voulez que cela soit évité et provoque une erreur, car de la distribution de int à varchar

Ce comportement strict n'est pas possible dans aucun version de SQL Server pour le moment. Though it is a moderately highly voted request on the connect site.

Tous les codes postaux de votre environnement local doivent-ils contenir un caractère -? Si c'est le cas, vous pouvez appliquer cet aspect avec une contrainte de vérification, sinon vous devrez simplement faire attention dans vos instructions d'insertion.

Les insertions provenant de votre application doivent être paramétrées de toute façon sur le bon type, donc je suppose que cela s'applique uniquement aux instructions d'insertion manuelles?