2

我已經創建了一個用戶定義的類型(有腳本來創建)類型衝突:操作數如下使用SQL Server上的用戶定義的表類型

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

您可以添加相關部分的函數體(例如您如何引用'@ InputSKUs')? –

+0

已經整理它,得到它的工作 - 我仍然在功能的身體因此相當令人困惑的錯誤消息,有以前的(非主鍵)用戶自定義類型的幾個引用(名稱相同)! –

回答

1

我以前用戶定義的數據類型在不同的數據庫,並已在我打電話(在這種情況下,淨GP功能)的職能明確提到它。

然後,我改變了數據類型,使其包含一個主鍵(兩者都具有相同的名稱),但仍然引用了函數體中的前一個數據類型,因此引起了令人困惑但完全準確的錯誤消息。

總之,確保你要麼改變你的功能在所有點的所有引用,或者更合理,打電話給你的數據類型不同的東西,以便能夠解決這更好!

+2

難道有幫助,如果你已經改變基本的類型後,運行鍼對您的所有功能'sp_refreshsqlmodule'?通過創建函數'WITH SCHEMABINDING',您可以避免將來也遇到這個問題 - 在不更改函數的情況下,不能更改類型。 –

相關問題