【问题标题】:SQL Server Table Valued ParametersSQL Server 表值参数
【发布时间】:2018-11-28 14:45:44
【问题描述】:

我正在尝试创建一个表值参数以输入到 MS SQL Server 存储过程中。我的创建声明:

CREATE TYPE dbo.tvt_AbusedBy AS TABLE  
( Assessment_Behavorial_AbusedID int, Assessment_BehavorialID int,
  Ref_Abuse_TypeID int, Abuser_Name varchar(50), GenderID int,
  Relationship_TypeID int, Age int)  

当尝试作为参数添加到 proc 中时:

CREATE PROCEDURE [dbo].[qryAddUpdateMultipletblAssessment_Behavorial_Abused] 
@prm_Assessment_Abused AS dbo.tvt_AbusedBy READONLY,

我收到错误消息“参数 @prm_Assessment_Abused 不能被声明为 READONLY,因为它不是表值参数”。

它似乎没有将其识别为表值参数。

如果我远程 READONLY 规定,它会给我一个错误“参数或变量 @prm_Assessment_Abused 的类型无效。

一定是我尝试创建表值参数类型的问题。

有什么想法吗?

【问题讨论】:

  • 尝试在参数声明中去掉AS
  • 删除 dbo。来自表值参数名称

标签: sql-server table-valued-parameters


【解决方案1】:

在存储过程声明中添加参数时不要使用AS

CREATE PROCEDURE [dbo].[qryAddUpdateMultipletblAssessment_Behavorial_Abused] 
  @prm_Assessment_Abused dbo.tvt_AbusedBy READONLY

【讨论】:

    【解决方案2】:

    来自 MS 文档 - https://docs.microsoft.com/en-us/sql/t-sql/statements/create-procedure-transact-sql?view=sql-server-2017 参数前不需要AS,参数声明后使用。

    链接示例(稍作修改):

    CREATE PROCEDURE dbo.usp_add_kitchen 
    @dept_id int, @kitchen_count int NOT NULL  
    AS  
    BEGIN
      UPDATE dbo.Departments  
      SET kitchen_count = ISNULL(kitchen_count, 0) + @kitchen_count  
      WHERE id = @dept_id  
    END;  
    GO  
    

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多