是否可以在存储过程的定义中定义表类型参数



是否可以在存储过程的定义中将表类型定义为参数?

类似这样的东西:

CREATE PROCEDURE [dbo].[proc_People_insert]
@People TABLE(Name VARCHAR(20), Age INT) READONLY
AS
-- Do something here
GO

我知道我可以先创建一个表类型,比如:

CREATE TYPE [dbo].Person AS TABLE
(
[Name] VARCHAR(20), 
Age INT
)

然后像一样定义程序

CREATE PROCEDURE [dbo].[prco_People_insert]
@People dbo.Person READONLY
AS
-- Do something here
GO

但这将使我在数据库中留下一堆用户定义的表类型。

我希望使用Dapper来调用存储的proc并传入一个Person类型列表。

我可以用内联SQL语句和Dapper(见下文(实现大容量插入功能,但我想知道是否可以用存储的procs和Dappers实现同样的功能。类似。。。

INSERT INTO dbo.People([Name], Age)
VALUES(@Name, @Age)
// C# Person class
public class Person(public string Name, public int Age)
// Pseudo Dapper call
connection.Execute(sql, new List<Person>(){ ... });

根据@DanGuzman的建议,传入JSON可以处理

CREATE PROCEDURE [dbo].[prc_PeopleByJSON_insert]
@PeopleJSON VARCHAR(MAX)
AS
INSERT INTO PersonTable(Name, Age)
SELECT Name, Age
FROM OPENJSON(@PeopleJSON)
WITH(Name VARCHAR(20), Age INT)
GO

最新更新