У меня есть пользовательский тип таблицы с именем tvpInsertedColumns :
CREATE TYPE [Audit].[tvpInsertedColumns] AS TABLE(
[ColumnName] [varchar](max) NOT NULL,
[NewValue] [varchar](max) NULL
)
В хранимой процедуре я пытаюсь сделать это (@Name и @PhoneVARCHARs) :
DECLARE @AuditColumns Audit.tvpInsertedColumns
INSERT INTO @AuditColumns (ColumnName,NewValue)
SELECT 'Name',@Name UNION ALL
SELECT 'Phone',@Phone
Сбой из-за ошибки:
Преобразование не удалось при преобразовании значения varchar 'Some Name' в тип данных int.
Однако в другой хранимой процедуре я делаю это (@ AddressLine1 и @ AddressLine1 - VARCHAR) :
DECLARE @AuditColumns AS Audit.tvpInsertedColumns
INSERT INTO @AuditColumns (ColumnName,NewValue)
SELECT 'AddressLine1',@AddressLine1 UNION ALL
SELECT 'AddressLine2',@AddressLine2
И все работает просто отлично.
Обе хранимые процедуры просто выполняют простую вставку, а затем пытаются использовать тип вместе с другой хранимой процедурой, которая принимает UDT в качестве параметра.
Это мой первый реальный опыт использования UDT, поэтому я надеюсь, что яЯ просто упускаю что-то очевидное, но это не имеет смысла для меня.Дайте мне знать, если вам нужна дополнительная информация.