SQL Server表值参数

时间:2018-11-28 14:45:45

标签: sql-server table-valued-parameters

我正在尝试创建一个表值参数,以输入到MS SQL Server存储的proc中。我的创建语句:

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具有无效的类型。

我试图创建表值参数类型的方式一定有问题。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在存储过程声明中添加参数时,请勿使用AS

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

答案 1 :(得分:0)

摘自MS文档-https://docs.microsoft.com/en-us/sql/t-sql/statements/create-procedure-transact-sql?view=sql-server-2017 在参数之前不需要AS,在参数声明之后使用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