the*_*ent 15 sql t-sql user-defined-types sql-server-2008
我有一个名为tvpInsertedColumns的用户定义表类型:
CREATE TYPE [Audit].[tvpInsertedColumns] AS TABLE(
[ColumnName] [varchar](max) NOT NULL,
[NewValue] [varchar](max) NULL
)
Run Code Online (Sandbox Code Playgroud)
在存储过程中我试图这样做(@Name和@Phone都是VARCHAR):
DECLARE @AuditColumns Audit.tvpInsertedColumns
INSERT INTO @AuditColumns (ColumnName,NewValue)
SELECT 'Name',@Name UNION ALL
SELECT 'Phone',@Phone
Run Code Online (Sandbox Code Playgroud)
这失败并出现错误:
将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
Run Code Online (Sandbox Code Playgroud)
一切正常.
两个存储过程都只是执行一个简单的插入,然后尝试将该类型与另一个以UDT作为参数的存储过程一起使用.
这是我对UDT的第一次真实体验,所以我希望我只是遗漏了一些明显的东西,但这对我来说毫无意义.如果您需要更多信息,请与我们联系.
dan*_*die 17
DECLARE @AuditColumns Audit.tvpInsertedColumns
INSERT INTO @AuditColumns (ColumnName,NewValue)
SELECT 'Name',@Name UNION ALL
SELECT 'Phone',@Phone
Run Code Online (Sandbox Code Playgroud)
我对UDT知之甚少,但我认为正在发生的是,在某一点上,@name
或者@phone
值都是整数类型.
尝试将@Name和@Phone转换为varchar
INSERT INTO @AuditColumns (ColumnName,NewValue)
SELECT 'Name', cast(@Name as varchar) UNION ALL
SELECT 'Phone', cast(@Phone as varchar)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24875 次 |
最近记录: |