2016-12-21 3 views
0

Я создал таблицу с именем account:Операнда ошибка типа столкновения при выполнении хранимой процедуры

TableDefinition

Я также создал тип таблицы под названием 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

Покажите 'exec' вы привыкли называть эту процедуру –

+0

@Prdp я раз щелкнул и попытались его выполнением. Как и в изображении, он задал мне входной параметр – trx

+0

. Возможно, такая же проблема, как здесь: (http://stackoverflow.com/questions/12789560/sql-server-table-type-clash-operand) – StefanR

ответ

3

Вы не можете выполнить хранимую процедуру, которая использует параметр таблицы, используя графический интерфейс, предоставленный SSMS. Вы должны написать тест вручную:

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

Мы приводим приведенное выше в в новом окне запроса говорится: «Не удалось найти хранимую процедуру» – trx

+0

Убедитесь, что вы работаете с правильной базой данных и схемой. –

Смежные вопросы