我有一个名为 tvpInsertedColumns 的用户定义表类型:
CREATE TYPE [Audit].[tvpInsertedColumns] AS TABLE( [ColumnName] [varchar](max) NOT NULL, [NewValue] [varchar](max) NULL )
在存储过程中,我尝试执行此操作 (@Name和@Phone均为VARCHAR) :
DECLARE @AuditColumns Audit.tvpInsertedColumns INSERT INTO @AuditColumns (ColumnName,NewValue) SELECT 'Name',@Name UNION ALL SELECT 'Phone',@Phone
失败并显示以下错误:
将varchar值“某些名称”转换为数据类型int时,转换失败。
但是,在另一个存储过程中,我正在这样做 (@ AddressLine1和@ AddressLine1是VARCHAR) :
DECLARE @AuditColumns AS Audit.tvpInsertedColumns INSERT INTO @AuditColumns (ColumnName,NewValue) SELECT 'AddressLine1',@AddressLine1 UNION ALL SELECT 'AddressLine2',@AddressLine2
而且一切正常。
这两个存储过程都只是做一个简单的插入,然后尝试将类型与另一个以UDT作为参数的存储过程一起使用。
这是我第一次使用UDT,这是我的第一次真实经验,所以我希望我只是缺少一些明显的东西,但这对我来说没有任何意义。让我知道您是否需要更多信息。
我不知道很多关于UDT的,但我认为正在发生的是,在一个点上,无论是@name或@phone值是整数类型。
@name
@phone
尝试将@Name和@Phone强制转换为varchar
INSERT INTO @AuditColumns (ColumnName,NewValue) SELECT 'Name', cast(@Name as varchar) UNION ALL SELECT 'Phone', cast(@Phone as varchar)