【问题标题】:Passing multiple values to a parameter of a function in SQL将多个值传递给 SQL 中函数的参数
【发布时间】:2016-02-03 04:16:00
【问题描述】:

有函数Getfunctionname(userid, startdate, enddate)返回一个表

我的问题是我可以传递具有多个值的变量吗?

getfunctionname(@userid, startdate, enddate)

变量@userid的值在哪里

1
2
3
4
5

(实际上是使用split 函数将值从1,2,3,4,5 中分离出来)

如果可以的话请告诉我

【问题讨论】:

标签: sql sql-server sql-server-2008 tsql sql-server-2012


【解决方案1】:

使用CSV的概念

CREATE FUNCTION [dbo].[uspGetNumbers]
    userid,startdate,enddate // define your paramters the way you want
AS
BEGIN
// your code
JOIN dbo.fnSplit(@UserIDs, ',') 
END
GO

示例函数:

SELECT [dbo].[uspGetNumbers] '1,2,3,4,5', '', ''

【讨论】:

    【解决方案2】:

    我喜欢的一种方法是创建一个新的用户定义表数据类型。

    CREATE TYPE [dbo].[IdList] AS TABLE(
        [Id] [int] NULL
    )
    

    然后您可以将该数据类型用作参数之一

    CREATE FUNCTION Getfunctionname
    (   
        @UserIDs dbo.IdList READONLY,
        @startdate INT,
        @endtdate INT
         )
    RETURNS @ReturnTable TABLE                                        
       (                                        
         -- ReturnTable
       )
    AS
    BEGIN
      -- Query    
    RETURN
    
    END
    

    【讨论】:

      【解决方案3】:

      我刚刚遇到了这个问题,我使用了这篇文章中的 CROSS APPLY 解决方案: SQL Server: run function for each row based on the provided row value

      要使用 CROSS APPLY,您需要先选择您的值,然后再选择 CROSS APPLY。我之前没有使用过 split 函数,所以我没有确切的语法, 但如果你使用类似的东西:

      选择@userid, F1.* from split(1,2,3,4,5), CROSS APPLY getfunctionname(@userid, startdate, enddate) F1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-02
        • 1970-01-01
        • 2018-12-16
        • 1970-01-01
        • 2020-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多