【问题标题】:Create a function that accepts list of ids?创建一个接受 id 列表的函数?
【发布时间】:2020-01-22 21:40:17
【问题描述】:

我想创建一个这样的 SQL 函数(伪代码):

function PeopleInCompanies(companyIds)
   SELECT * from Person WHERE CompanyId IN (companyIds)
end function

然后这样称呼它:

define companyIds = 1,2,3
select * from PeopleInCompanies(companyIds)

有可能吗?

【问题讨论】:

标签: sql sql-server


【解决方案1】:

您需要使用表格类型参数。假设CompanyIDint

CREATE TYPE dbo.ints AS TABLE ([value] int);
GO

CREATE FUNCTION dbo.PeopleInCompanies (@CompanyID dbo.ints READONLY)
RETURNS TABLE
AS RETURN

    SELECT P.* --This should be replaced by the columns you need.
    FROM dbo.Person P
         JOIN @CompanyID CI ON P.CompanyID = CI.[Value];

然后你会调用这个函数:

DECLARE @CompanyID dbo.ints;
INSERT INTO @CompanyID
VALUES (1),(2),(3);

SELECT *
FROM dbo.PeopleInCompanies(@CompanyID);

【讨论】:

    【解决方案2】:

    SQL Server 不支持宏替换。也就是说,您有 Gordon 和 Larnu 提到的表类型,或者您可以简单地解析/拆分分隔字符串

    只是另一种选择

    Declare @companyIds varchar(max) = '1,2,3'
    
    Select A.*
      From Person A
      Join string_split(@companyIds,',') B 
        on A.CompanyID = B.Value
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 2019-04-30
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      相关资源
      最近更新 更多