Типов операндов, используя пользовательский тип таблицы на SQL сервере


Я создал пользовательский тип (со скриптом для создания), приведенный ниже:

CREATE TYPE [dbo].[udt_ProductID_SellingPrice] AS TABLE(
    [Product_Id] [int] NOT NULL,
    [Selling_Price] [money] NULL,
    PRIMARY KEY CLUSTERED 
(
    [Product_Id] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)

На той же базе данных я создал функцию, которая использует этот тип:

CREATE FUNCTION [dbo].[fn_NetGP_tbl](@InputSKUs udt_ProductID_SellingPrice READONLY, @Currency VARCHAR(3), @SiteName VARCHAR(255), @CatalogueSite VARCHAR(5), @SiteGroup VARCHAR(255))
RETURNS @Results TABLE
(
   Product_Id INT NOT NULL,
   Selling_Price MONEY NULL,
   Net_GP MONEY NULL
)
AS
BEGIN

Я объявляю входные SKU в виде таблицы в памяти следующим образом и вызываю функцию следующим образом:

DECLARE @InputSKUs dbo.udt_ProductId_SellingPrice

INSERT INTO @InputSKUs VALUES(10352316, 500.00)

SELECT * FROM Sensu_Staging.dbo.fn_NetGP_tbl(@InputSKUs, 'GBP', 'Site_Name', 'SITE', 'Site_Group')

И получить (то, что я нахожу, довольно запутанным) сообщение об ошибке:

Столкновение типов операндов: udt_ProductID_SellingPrice несовместимо с udt_ProductID_SellingPrice

I не могу понять, что я делаю неправильно - это сработало с предыдущими базами данных, единственное изменение, которое я сделал, - это добавление первичного ключа / кластеризованного индекса к типу ProductID_SellingPrice,и это, похоже, отбросило все.

Нужно ли менять функцию? Или невозможно создать индекс для пользовательского табличного типа в памяти? Мы надеялись ускорить процесс, индексируя эту таблицу, но если это невозможно, то, я думаю, нам придется найти другие способы.

Ура,

Мэтт

1 2

1 ответ:

Ранее я определил тип пользовательских данных в другой базе данных и явно ссылался на него в вызываемых мною функциях (в данном случае-в функции Net GP).

Затем я изменил тип данных, чтобы включить первичный ключ (оба с одинаковым именем), и все еще ссылался на предыдущий тип данных в теле моей функции, следовательно, запутанное, но полностью точное сообщение об ошибке.

Короче говоря, убедитесь, что вы либо измените все ссылки во всех точках вашего функционируйте или, что более разумно, называйте свои типы данных разными вещами, чтобы иметь возможность лучше устранять неполадки!