【问题标题】:Operand type clash error when executing stored procedure执行存储过程时操作数类型冲突错误
【发布时间】:2016-12-21 07:45:11
【问题描述】:

我创建了一个名为account的表:

我还创建了一个名为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 赋值:

然后它会抛出一个错误:

消息 206,级别 16,状态 2,过程 usp_InsertorUpadte,第 2 行 操作数类型冲突:nvarchar 与 account_TT 不兼容

(受影响的 1 行)

为什么会抛出此错误,我该如何解决导致该错误的问题?

【问题讨论】:

  • 显示你用来调用这个过程的exec
  • @Prdp 我只是右键单击并尝试执行它。如图所示,它问我输入参数
  • 可能与此处相同的问题:(stackoverflow.com/questions/12789560/…)

标签: sql-server stored-procedures


【解决方案1】:

您无法使用 SSMS 提供的 GUI 执行使用表值参数的存储过程。您需要手动编写测试:

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

【讨论】:

  • 我们在新的查询窗口中给出上述内容Couldnot find the stored Procedure
  • 确保您在正确的数据库和架构上运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多