由于我不知道的原因,我无法访问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
。
答案 0 :(得分:2)
@AccountTVP.AccountNumber
表示一行数据,而不是单个值,因此尝试打印它将无效。
您应该能够使用SELECT语句查看传入值:
SELECT * FROM @_AccountList;
看起来存储过程顶部的SELECT语句应该让您看到值,但是,您实际上没有在@AccountTVP
中设置任何值,因此它将为空。
我不确定,但我怀疑调试器可能不起作用,因为AccountList
是自定义类型。