2008-10-22 5 views
2

Supposons que j'ai un groupe de champs varchar (6000) dans une table et que je souhaite les modifier en champs de texte. Quelles sont les ramifications des procédures stockées dont les arguments sont de type varchar (6000). Chaque procédure stockée nécessite-t-elle également que ces types de données d'argument soient modifiés?Conversion d'un type d'argument Proc stocké dans SQL Server

Répondre

4

Les champs de texte sont deprecated dans SQL Server 2005 et versions ultérieures. Vous devriez utiliser varchar (MAX), si possible. Si vous pensez que plus de 6000 caractères sont passés dans les arguments de vos procédures stockées, vous devrez également les modifier.

2

Les champs de texte sont difficiles à utiliser dans SQL Server. Vous ne pouvez pas réellement déclarer les variables locales de type text (sauf en tant que paramètres pour une procédure stockée) et la plupart des fonctions de manipulation de chaînes ne fonctionnent plus sur les champs de texte.

De même, si vous avez des déclencheurs, les champs de texte n'apparaîtront pas sur les tables INSERTED ou DELETED.

Fondamentalement, si le champ ne contient que des données d'un programme et que vous ne le manipulez pas, ce n'est pas grave. Mais si vous avez des procédures stockées pour manipuler la chaîne, votre tâche sera beaucoup plus difficile. Comme tvanfosson mentionné si vous avez SQL Server 2005 utiliser VARCHAR (MAX) alors vous obtenez la longueur d'un champ de texte avec la possibilité de le manipuler comme s'il s'agissait d'un VARCHAR.

0

La raison de l'utilisation du champ de texte est que tous les champs varchar (6000) d'une ligne dépassent la longueur de ligne maximale. Les champs de texte stockent juste un pointeur dans la rangée ne dépassant ainsi pas la longueur maximum de rangée de 8000 de SQL Server quelque chose. ATM la base de données ne peut pas être normalisée. Les données ne sont pas manipulées par les procédures stockées, elles sont juste insérées, mises à jour et effacées.

VARCHAR (MAX) se comporte-t-il comme un champ de texte et ne stocke qu'un pointeur sur les données de la ligne?

1

Les autres réponses sont exactes, mais elles ne répondent pas à votre question. Varchar (max) est le chemin à parcourir. Si vous avez créé les vecteurs varchar (max)/text, mais que les arguments proc stockés sont identiques, tous les champs entrés via le proc stocké seront tronqués à 6000 caractères. Puisque vous dites que cela ne dépassera jamais cela, tout ira bien, jusqu'à ce que, bien sûr, ce ne soit pas le cas. Il ne jette pas une erreur. C'est juste tronqué. Je ne suis pas sûr du comportement exact des versets varchar (max), mais je suis à peu près sûr qu'une fois que vous en aurez mis beaucoup dans une table, vous pourrez obtenir des résultats fous. Pourquoi tant de grands champs dans une table?

Questions connexes