是否可以在存储过程的定义中将表类型定义为参数?
类似这样的东西:
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