Cómo recuperar el valor de un tipo de tabla definido por el usuario (UDTT)
-
26-09-2020 - |
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]?
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);
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';