Utilisateur-Type de Table Défini par l'insertion causant parfois des erreurs de conversion
J'ai une Table Défini par l'Utilisateur Type de tvpInsertedColumns:
CREATE TYPE [Audit].[tvpInsertedColumns] AS TABLE(
[ColumnName] [varchar](max) NOT NULL,
[NewValue] [varchar](max) NULL
)
Dans une Procédure Stockée je suis tenter de faire ce (@Nom et @Téléphone sont VARCHARs):
DECLARE @AuditColumns Audit.tvpInsertedColumns
INSERT INTO @AuditColumns (ColumnName,NewValue)
SELECT 'Name',@Name UNION ALL
SELECT 'Phone',@Phone
Cela échoue avec l'erreur:
Conversion a échoué lors de la conversion de la
valeur varchar 'Nom'
pour le type de données int.
Toutefois, dans une autre Procédure Stockée que je fais cette (@AddressLine1 et @AddressLine1 sont VARCHARs):
DECLARE @AuditColumns AS Audit.tvpInsertedColumns
INSERT INTO @AuditColumns (ColumnName,NewValue)
SELECT 'AddressLine1',@AddressLine1 UNION ALL
SELECT 'AddressLine2',@AddressLine2
Et tout fonctionne bien.
Les Procédures Stockées sont juste faire une simple insertion, puis essayez d'utiliser le type de concert avec une autre procédure stockée qui prend l'UDT en tant que paramètre.
C'est ma première vraie expérience avec Udt, donc j'espère que je suis juste en manque de quelque chose d'évident, mais cela n'a aucun sens pour moi. Laissez-moi savoir si vous avez besoin de plus amples informations.
OriginalL'auteur theChrisKent | 2011-05-23
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas beaucoup au sujet de l'Udt, mais ce que je pense qui se passe est que,
à un moment donné, soit
@name
ou@phone
les valeurs sont de type integer.Essayez de lancer @Nom et @Téléphone varchar
Ce n'était pas tout à fait juste, mais il m'a eu à la solution (et c'est tout ce que je voulais). Le
@Name
et@Phone
variables n'a jamais changé types, le problème est que à un certain point (Après mon échantillon de coupure) j'ai aussi été l'insertion d'un entier en supposant qu'il y aurait une conversion automatique. Casting tous les nonVARCHAR
types deVARCHAR(MAX)
résolu le problème. Je soupçonne gbn est vrai que cela n'a rien à voir avec l'Udt, mais plutôt avec le type de données de priorité dansUNION
consolidés. Merci à vous deux pour votre aide.OriginalL'auteur Sung M. Kim