>source

목표 :

사용자가 값 목록을 입력 할 수 있도록 함수에 매개 변수를 갖고 싶습니다. 이상적으로 가장 간단한 솔루션은 ... 참고 : dbs 테이블을 만들 수있는 권한이 없습니다.

상황 :

CREATE FUNCTION dbo.fnExample
(
    @StartDate AS Date -- Parameter 1
    @ParameterArray AS ... -- This would be the parameter that accepts a list of values
)
RETURNS TABLE
AS
RETURN
...code...
GO

TVF에서 여러 매개 변수를 전달하는 방법을 모르지만 이것이 솔루션을 보는 방법입니다

SELECT *
FROM dbo.fnExample ('2019-01-01') and ([list of values])


  • 답변 # 1

    테이블 유형 매개 변수를 사용하면 다음과 같은 작업을 수행 할 수 있습니다.

    CREATE TYPE dbo.SomeArray AS TABLE (SomeInt int); --Create the TYPE
    GO
     --Now the Function
    CREATE FUNCTION dbo.Example (@StartDate date, @Array dbo.SomeArray READONLY)
    RETURNS TABLE
    AS RETURN
        SELECT DATEADD(DAY, SomeInt, @StartDate) AS NewDate
        FROM @Array
    GO
    --Now to test
    --Declare the TYPE
    DECLARE @Array dbo.SomeArray;
    --Insert the data
    INSERT INTO @Array (SomeInt)
    VALUES(7),(1654),(13);
    --Test the function
    SELECT *
    FROM dbo.Example(GETDATE(), @Array) E;
    GO
    --Clean up
    DROP FUNCTION dbo.Example;
    DROP TYPE dbo.SomeArray;
    
    

    와이즈 비즈 방법 :

    JOIN
    
    

    FROM dbo.YourTable YT JOIN @Array A ON YT.SomeInt = A.SomeInt 사용법 :

    EXISTS
    
    

  • 답변 # 2

    SQL Server 2016+를 사용하는 경우 가장 간단한 방법은 JSON을 사용하는 것입니다 :

    WHERE EXISTS (SELECT 1 FROM @Array A WHERE YT.SomeInt = A.SomeInt)
    
    
    CREATE FUNCTION dbo.fnExample ( @StartDate AS Date -- Parameter 1 @ParameterArray AS NVARCHAR(MAX) -- pass JSON Array like '[1,2,3,4,5]' ) RETURNS TABLE AS RETURN SELECT TRY_CONVERT(INT,j.value) AS [ID] FROM OPENJSON(@ParameterArray) j; GO

관련 자료

  • 이전 c# - NET Core 30에서 NET Core 22 NuGet 라이브러리를 사용하지만 어셈블리를 찾을 수없는 예외가 발생 함
  • 다음 qmake - QT pro 파일의 여러 조건