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 调用此函数,我们首先使用的方法是数据库。
在 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在这里
| 归档时间: |
|
| 查看次数: |
5620 次 |
| 最近记录: |