如何将列表作为输入参数传递给TBV函数?

问题描述 投票:1回答:1

我有一个TBV函数,并希望像这样传递我的函数列表类型参数

ALTER FUNCTION [dbo].[fn_Functiont]
(
 @listType (what  type i could use here ??)
)
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
)

我想在我的函数中使用这个@listType,特别是检查该列表是否包含任何值,并使用该值执行某些操作。我通过Entity Framework 5调用此函数。

sql .net sql-server entity-framework-5 sql-function
1个回答
2
投票

在过去,我们习惯于传递逗号分隔的字符串并将其拆分为表格。现在,SQL Server支持用户定义的表类型,可以在您的方案中使用。

创建新的用户定义表类型

 CREATE TYPE CustomList AS TABLE 
 ( 
   ListItem VARCHAR(50)
 )
 GO

如何申报

DECLARE @MyList CustomList

如何使用

INSERT INTO @MyList
SELECT '1'
GO
INSERT INTO @MyList
SELECT '2'

在您的情况下,您的列表类型可以如下所示。

ALTER FUNCTION [dbo].[fn_Functiont]
(
 @listType MYLIST
)
....
....

要了解更多有关此访问MSDN

要了解如何在实体框架中使用表类型,您可以检查here

© www.soinside.com 2019 - 2024. All rights reserved.