我正在尝试创建一个表值参数,以输入到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具有无效的类型。
我试图创建表值参数类型的方式一定有问题。
有什么想法吗?
答案 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