如何从UDT中检索值

时间:2015-06-23 11:02:59

标签: sql sql-server

目标:
如果[wwtest],我想达到并显示@data的值。

问题:
UDT来自数据库[test],我检索错误消息“类型名称'test.dbo.tvf_id'包含的最大前缀数量。最大值为1.”。

我不知道如何从[wwtest]的查询文档中的数据库测试中检索数据?

enter image description here

下面的源代码是在数据库测试中创建的。

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);

2 个答案:

答案 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 (. . .);

三(或四)部分命名适用于实际表,而不适用于临时表或表变量。