Pregunta

METAL:
Quiero alcanzar y mostrar el valor de @data dentro de [WWTEST].

Problema:
El UDTT es de la base de datos [prueba] y recibo un mensaje de error:

El nombre 'test.dbo.tvf_id' contiene más que el número máximo de prefijos.El máximo es 1.

No sé cómo recuperar los datos de la base de datos [Test] En una consulta actualmente en la base de datos [WWTEST]?

ingrese la descripción de la imagen aquí

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

¿Fue útil?

Solución

Debe crear el tipo dentro de la base de datos donde la declarará: los tipos de datos no se pueden contactar en las bases de datos o servidores.Esto no es diferente de crear una variable local utilizando un tipo de alias, tiene que existir en el contexto de la base de datos actual (o su código tiene que ejecutar en el contexto de la base de datos donde existe el tipo, por ejemplo,

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 bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top