我已经创建了一个用户定义的类型(带有CREATE脚本),如下所示:
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不兼容
我无法弄清楚我做错了什么 - 这对以前的数据库起了作用,我唯一的改变是向ProductID_SellingPrice类型添加主键/聚簇索引,这似乎抛弃了所有内容
我需要更改功能吗?或者是否无法在内存自定义表类型中创建索引?我们希望通过索引该表来加快这一过程,但如果不可能,那么我想我们必须找到其他方法。
干杯,
马特
答案 0 :(得分:1)
我以前在不同的数据库中定义了用户数据类型,并在我调用的函数中明确引用了它(在本例中为Net GP函数)。
然后我更改了数据类型以包含主键(两者都具有相同的名称),但仍然在我的函数体中引用了先前的数据类型,因此出现了令人困惑但完全准确的错误消息。
简而言之,请确保您更改功能中所有点的所有引用,或者更明智地将数据类型调用为不同的内容,以便能够更好地排除故障!