Pergunta

Meta:
Quero alcançar e exibir o valor de @data dentro de [wwtest].

Problema:
O UDTT é do banco de dados [test] e recebo uma mensagem de erro:

O nome do tipo 'test.dbo.tvf_id' contém mais do que o número máximo de prefixos.O máximo é 1.

Não sei como recuperar os dados do banco de dados [test] em uma consulta atualmente no banco de dados [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);
Foi útil?

Solução

Você precisa criar o tipo dentro do banco de dados onde irá declará-lo - os tipos de dados não podem ser alcançados através de bancos de dados ou servidores.Isso não é diferente de criar uma variável local usando um tipo de alias - ela deve existir no contexto do banco de dados atual (ou seu código deve ser executado no contexto do banco de dados onde o tipo existe, por exemplo

EXEC dbname.sys.sp_executesql N'DECLARE @t dbo.type; 
  INSERT @t(cols) SELECT whatever...;
  -- do other stuff but it has to be in this dynamic SQL block';
Licenciado em: CC-BY-SA com atribuição
Não afiliado a dba.stackexchange
scroll top