表值参数不可见

时间:2014-08-12 18:57:55

标签: sql-server tsql table-valued-parameters

由于我不知道的原因,我无法访问TVP的内容。调试器说@_AccountList和@AccountTVP是表,但是我无法查看内容,打印它们,intellisense也不会为列提供自动完成功能。我觉得可能说错了或定义模棱两可。有什么建议?

CREATE TYPE AccountList
AS TABLE
(
    AccountNumber varchar(50),
    AccountType varchar(50)
) 
GO

CREATE PROCEDURE [dbo].[updateNumbers_ArchiveDB]
 @_AccountList AccountList READONLY,
 @padding int,
 @proc_dateStart datetime,
 @proc_dateEnd datetime
 AS 

 DECLARE @AccountTVP AS AccountList;

 BEGIN
 SET NOCOUNT ON;

SELECT * FROM @AccountTVP;


 UPDATE dbo.Archive2007001 
    SET LogicalAccount = @padding + AccountNumber
    FROM dbo.Archive2007001 INNER JOIN @AccountTVP AS tvp
    ON dbo.Archive2007001.LogicalAccount = tvp.AccountNumber
    WHERE ProcessDate BETWEEN @proc_dateStart AND @proc_dateEnd

 UPDATE dbo.DailyArchive 
    SET LogicalAccount = @padding + AccountNumber
    FROM dbo.DailyArchive INNER JOIN @AccountTVP AS tvp
    ON dbo.DailyArchive.LogicalAccount = tvp.AccountNumber
    WHERE ProcessDate BETWEEN @proc_dateStart AND @proc_dateEnd


 -- does not work PRINT N'tvp.AccountNumber is ' + @AccountTVP.AccountNumber

 END

以下是我执行该程序的方法。

declare @p1 dbo.AccountList
insert into @p1 values(N'Account Number',N'Account Type')
insert into @p1 values(N'7463689',N'Basic')
insert into @p1 values(N'1317893',N'Premium')
insert into @p1 values(N'2806127',N'Basic')

exec updateNumbers_ArchiveDB 
@_AccountList=@p1,
@padding=N'111',
@proc_dateStart='2008-01-04 11:24:46',
@proc_dateEnd='2008-01-04 11:24:46'

答案:我要查找的数据已加载到@_AccountList,而不是@AccountTVP

1 个答案:

答案 0 :(得分:2)

@AccountTVP.AccountNumber表示一行数据,而不是单个值,因此尝试打印它将无效。

您应该能够使用SELECT语句查看传入值:

SELECT * FROM @_AccountList;

看起来存储过程顶部的SELECT语句应该让您看到值,但是,您实际上没有在@AccountTVP中设置任何值,因此它将为空。

我不确定,但我怀疑调试器可能不起作用,因为AccountList是自定义类型。