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

时间:2018-02-05 11:16:16

标签: sql .net sql-server entity-framework-5 sql-function

我有一个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调用此函数。

1 个答案:

答案 0 :(得分: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