【问题标题】:Why a table type parameter is not getting declared in sp?为什么表类型参数没有在 sp 中声明?
【发布时间】:2019-03-14 23:55:26
【问题描述】:
ALTER PROCEDURE [dbo].[InsertInvoices] 


        @ServiceIDs as dbo.ServiceIDs READONLY,

但它没有被声明并抛出错误:

消息 2715,级别 16,状态 3,过程 InsertInvoices,第 18 行列, 参数或变量 #8:找不到数据类型 dbo.ServiceIDs。 参数或变量“@ServiceIDs”的数据类型无效。

即使我已经声明了一个表类型。

CREATE TYPE [dbo].[ServicesIDs] AS TABLE(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [ServiceID] [int] NULL,
    PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
GO

【问题讨论】:

  • 为什么@ServiceIDsdbo.ServiceIDs之间有一个as
  • @Ivien 已删除但仍无法正常工作
  • 用以下测试 SP 测试。这是工作。 -------------------------------------------------- --------------------------------------- 创建过程 [dbo].[InsertInvoices] @ServiceIDs 作为 ServicesIDs READONLY AS BEGIN Print 'test' END跨度>

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


【解决方案1】:

你的问题在于你的拼写。您的类型是 [dbo].[ServicesIDs] 但您使用 @ServiceIDs。问题是 's' 字符。

ALTER PROCEDURE [dbo].[InsertInvoices] 


        @ServiceIDs as dbo.ServicesIDs READONLY,

【讨论】:

    【解决方案2】:

    只是因为错字而无法正常工作: 您的类型称为[dbo].[ServicesIDs],但您正尝试将其用作dbo.ServiceIDs(注意Services 中缺少的's'!

    试试这个:

    ALTER PROCEDURE [dbo].[InsertInvoices] 
       @ServiceIDs as dbo.ServicesIDs READONLY,
    

    【讨论】:

      猜你喜欢
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多