2016-12-21 28 views
0

を実行するときに、私はテーブルを作成したがaccountと呼ば:オペランドタイプ衝突エラーストアドプロシージャ

TableDefinition

Iもaccount_TTと呼ばれるテーブルのタイプ作成:私は、その後に、ストアドプロシージャを作成

CREATE TYPE account_TT AS TABLE 
(
    AccountID nvarchar(50) 
) 

をアカウントテーブルのレコードの挿入/更新:

ALTER PROCEDURE [dbo].[usp_InsertorUpadte] 
@account_TT AS account_TT READONLY 

AS 
BEGIN 
    SET NOCOUNT ON; 

    BEGIN TRANSACTION; 

    MERGE dbo.[account] prj 
    USING @account_TT tt 
    ON prj.AccountID = tt.AccountID 
    WHEN MATCHED THEN UPDATE SET prj.CounterSeq = prj.CounterSeq+1 
    WHEN NOT MATCHED THEN INSERT (AccountID,CounterSeq) 
    VALUES (tt.AccountID, 1); 

    COMMIT TRANSACTION; 
END 
私はその上で右クリックして Execute Stored Procedureを選択し、パラメータ @account_TTの値を与え、このストアドプロシージャをテストするには

ExecuteWithParameter

それは、エラーがスローされます。

Msg 206, Level 16, State 2, Procedure usp_InsertorUpadte, Line 2 Operand type clash: nvarchar is incompatible with account_TT

(1 row(s) affected)

なぜこのエラーがありますスローされ、エラーの原因となる問題を解決するにはどうすればよいですか?

+0

あなたは私がちょうどクリックすると、それを実行しようとした –

+0

@Prdpこのプロシージャを呼び出すために使用される 'exec'表示します。画像のように、それは私に入力パラメータ – trx

+0

を聞いた可能性がありますここで同じ問題:(http://stackoverflow.com/questions/12789560/sql-server-table-type-clash-operand) – StefanR

答えて

3

SSMSが提供するGUIを使用して、テーブル値のパラメータを使用するストアドプロシージャを実行することはできません。手動でテストを記述する必要があります。

DECLARE @account_TT AS account_TT 
INSERT INTO @account_TT VALUES('IT') 
EXEC usp_InsertorUpadte @account_TT 
+0

私は私は上記新しいクエリーウィンドウに「ストアドプロシージャが見つかりませんでした」と表示される – trx

+0

正しいデータベースとスキーマを実行していることを確認してください。 –