目标:
如果[wwtest],我想达到并显示@data的值。
问题:
UDT来自数据库[test],我检索错误消息“类型名称'test.dbo.tvf_id'包含的最大前缀数量。最大值为1.”。
我不知道如何从[wwtest]的查询文档中的数据库测试中检索数据?
下面的源代码是在数据库测试中创建的。
create table datatable (id int,
name varchar(100),
email varchar(10),
phone varchar(10),
cellphone varchar(10),
none varchar(10)
);
insert into datatable values
(1, 'productname', 'A', 'A', 'A', 'A'),
(2, 'cost', '20', 'A', 'A', 'A'),
(3, 'active', 'Y', 'A', 'A', 'A');
insert into datatable values
(4, 'productname', 'A', 'A', 'A', 'A'),
(5, 'cost', '20', 'A', 'A', 'A'),
(6, 'active', 'Y', 'A', 'A', 'A');
insert into datatable values
(7, 'productname', 'A', 'A', 'A', 'A'),
(8, 'cost', '20', 'A', 'A', 'A'),
(9, 'active', 'Y', 'A', 'A', 'A');
CREATE TYPE [tvf_id] AS TABLE
(
[id] [int] NULL
,[OrdCol] [INT] NOT NULL
)
GO
DECLARE @data tvf_id INSERT INTO @data([id],[OrdCol])
VALUES (8,1), (2,2), (4,3), (1,4), (3,5);
答案 0 :(得分:1)
这很简单。表类型只能在其数据库中使用。您尝试按以下方式访问它:[test].[dbo].[tvf_id]
请尝试这样做:[dbo].[tvf_id]
正如您所说的错误,您超过了允许的前缀的最大值。允许1(dbo),你使用两个(test + dbo)。
有关详细信息,请阅读this。因为您似乎尝试在其数据库之外使用表类型。
解决这个问题的唯一方法可能是将您的逻辑移动到另一个数据库,然后将数据推送到wwtest。另一个想法可能是在wwtest中创建相同的表类型。
答案 1 :(得分:0)
声明表变量时,不要使用三部分命名:
declare @data table (id int, ordcol int);
insert into @data(id, ordcol)
values (. . .);
三(或四)部分命名适用于实际表,而不适用于临时表或表变量。