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