将整数数组作为(内联)用户定义函数 (SQL Server) 的参数传递

So_*_*_oP 3 sql-server entity-framework functions sql-server-2014 table-valued-parameters

我有 TBV 功能。像这样

ALTER FUNCTION [dbo].[fn_Functiont]
(
 @accessibleIds   ListAccesableIds READONLY
)
RETURNS TABLE 
AS
RETURN 
(   
SELECT d.*, b.Name AS Name, ps.Name AS PaymentSystemName, c.UserName AS UserName, c.FirstName AS ClientFirstName, c.LastName AS LastName, c.Number AS DocumentNumber, c.Id
FROM Document AS d
JOIN System AS ps ON d.SystemId = ps.Id
JOIN Client AS c ON c.Id = d.ClientId
LEFT JOIN Shop AS b ON b.Id = d.ShopId
WHERE d.OperationTypeId IN (2, 4, 5) AND c.Type = 1
)
Run Code Online (Sandbox Code Playgroud)

我想传递给这个包含整数的函数列表。我想创建表值类型,但这里的问题是我如何将 List 输入参数传递给函数?我知道我可以通过 ADO.Net 将列表传递给 SP很简单,但我的问题与实体框架和 TBF 函数有关

我通过实体框架 6 调用此函数,我们首先使用的方法是数据库。

McN*_*ets 6

在 SQL-Server 2014 上,您可以利用TYPE(别名数据类型)的优势,并将其作为模拟整数数组或任何其他表格数据的内联 UDF 的参数传递。

请记住,您必须使用 READONLY。

IF OBJECT_ID('dbo.MyTest') IS NOT NULL
    DROP TABLE dbo.MyTest;
GO

IF OBJECT_ID('dbo.MyFunction') IS NOT NULL
    DROP FUNCTION dbo.MyFunction;
GO

IF TYPE_ID ('dbo.Mytype') IS NOT NULL
    DROP TYPE dbo.Mytype;
GO

CREATE TYPE dbo.Mytype AS TABLE (Id int);
GO

CREATE TABLE dbo.MyTest (Id int, Val char(3));
INSERT INTO dbo.MyTest VALUES (1,'V1'),(2,'V2'),(10,'V10'),(11,'V11');
GO

CREATE FUNCTION dbo.MyFunction(@Table MyType READONLY)
RETURNS TABLE
AS
RETURN
(
    SELECT *
    FROM   MyTest
    WHERE  Id IN (SELECT Id FROM @Table)
);
GO
Run Code Online (Sandbox Code Playgroud)
DECLARE @myTable Mytype;
INSERT INTO @myTable(Id) VALUES(1),(2),(3),(4),(5);

SELECT * FROM MyFunction(@myTable);

| Id | Status |
|:--:|:------:|
|  1 |   V1   |
|  2 |   V2   |
Run Code Online (Sandbox Code Playgroud)

dbfiddle在这里