2

以下に示すユーザー定義型を作成しました(作成するスクリプトを使用):

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 タイプに追加することです.これはすべてを台無しにしたようです.

機能を変更する必要がありますか? または、インメモリ カスタム テーブル タイプにインデックスを作成することはできませんか? そのテーブルにインデックスを付けてプロセスを高速化することを望んでいましたが、それが不可能な場合は、他の方法を見つける必要があると思います.

乾杯、

マット

4

1 に答える 1

1

以前に別のデータベースでユーザー データ型を定義し、呼び出す関数 (この場合は Net GP 関数) で明示的に参照していました。

次に、データ型を変更して主キー (両方とも同じ名前) を含めましたが、関数の本体で以前のデータ型を参照していたため、紛らわしいが完全に正確なエラー メッセージが表示されました。

要するに、関数内のすべてのポイントですべての参照を変更するか、より適切にトラブルシューティングできるように、データ型を別のものと呼ぶようにしてください。

于 2013-04-15T16:45:26.183 に答える