【问题标题】:Operand type clash: NULL is incompatible with SmallIntTable SQL Server操作数类型冲突:NULL 与 SmallIntTable SQL Server 不兼容
【发布时间】:2017-11-06 18:38:58
【问题描述】:

我正在尝试在 SQL Server 中执行一个简单的存储过程。

USE [dbname]
GO

DECLARE @return_value int

EXEC    @return_value = [dbo].[usp_storprocname]
        @ID = NULL,
        @SomeID = 123456,
        @AddressTypeIDs = NULL

SELECT  'Return Value' = @return_value
GO

我得到的是一个错误:

消息 206,级别 16,状态 2,过程 usp_storprocname,第 0 行 [批处理开始第 2 行]
操作数类型冲突:NULL 与 SmallIntTable 不兼容

据我了解,它希望在@AddressTypeIDs 参数中获得某种带有数字的数组。我不需要按该字段过滤结果。我怎样才能在那里传递正确的值?

【问题讨论】:

  • 我们需要您的 sp 代码来帮助您完成这个
  • @Lamak 你能告诉我如何得到它吗?右键单击 SP 上的修改按钮是灰色的,我没有看到任何其他选项来查看其代码。
  • 那我就说你没权限看。你可以试试sp_helptext 'usp_storprocname',但我敢打赌它也行不通
  • @Lamak 告诉我There is no text for object 'usp_storprocname'. 有没有办法在不知道其代码的情况下将SmallIntTable 传递给这个存储过程?
  • 打开数据库下的 Programmability 树,然后在 Types>User-Defined Table Types 下查看,找出 SmallIntTable 的样子。

标签: sql sql-server stored-procedures sql-server-2012


【解决方案1】:

在执行存储过程之前,声明一个SmallIntTable类型的变量。

正如您所了解的,这将是一个包含单列的表格。

将所需的任何值插入到该表中,然后在执行存储过程时将该变量作为@AddressTypeIDs 参数的值传递。

例如如下

USE [dbname]

GO

DECLARE @return_value INT
DECLARE @AddressTypeIDs dbo.SMALLINTCOL;

INSERT INTO @AddressTypeIDs
VALUES     (1);

EXEC @return_value = [dbo].[usp_storprocname]
  @ID = NULL,
  @SomeID = 123456,
  @AddressTypeIDs = @AddressTypeIDs

SELECT 'Return Value' = @return_value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2020-05-29
    相关资源
    最近更新 更多