Как получить значение из пользовательского типа таблицы (UDTT)
-
26-09-2020 - |
Вопрос
Цель:
Я хочу достичь и отображать значение @data внутри [wwtest].
Проблема:
UDTT из базы данных [Test], и я получаю сообщение об ошибке:
Имя типа 'test.dbo.tvf_id' содержит больше, чем максимальное количество префиксов.Максимум 1.
Я не знаю, как получить данные из базы данных [Test] в запросе, в данный момент в базе данных [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);
. Решение
Вам необходимо создать тип внутри базы данных, где вы будете объявлять его, - типы данных не могут быть достигнуты между базами данных или серверами.Это не отличается от создания локальной переменной с использованием типа псевдонима - это должно существовать в контексте текущей базы данных (или ваш код должен выполнить в контексте базы данных, где существует тип типа, например.
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';
.