Tsql 以逗号分隔列表作为参数在存储过程中执行存储过程

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

这是我的问题:

INSERT INTO #PayGroupList EXEC CareCentral.[svr].[spSvrPayGroupsGet_V1] @Location

@location = '3380,4407'

当我硬编码时它起作用了:

INSERT INTO #PayGroupList EXEC CareCentral.[svr].[spSvrPayGroupsGet_V1]  '3380,4407'

当我传递具有相同值的@location时,它不起作用。

ALTER   Procedure [svr].[spSvrBranchReviewsGet]
@Location nVARCHAR(Max),            --Comma delimited string or All
@PayGroup nVARCHAR(Max),            --Comma delimited string  or All
@ApprovalStatus VARCHAR(10),        --Yes, No or All
@PayDate nVARCHAR(Max),             --Comma delimited string or All
@Division_ID VARCHAR(1000) = NULL,
@UserID INT = NULL,
@IsAdminCorp BIT                    --Admin or not

AS
Set NoCount ON




IF (@PayGroup = 'All')
    BEGIN
    
        DECLARE @PayGroupList NVARCHAR(MAX)= ''
        
        IF OBJECT_ID('tempdb.dbo.#PayGroupList') IS NOT NULL
        BEGIN
            DROP TABLE #PayGroupList;
        END
    
        CREATE TABLE #PayGroupList( PayGroupId NVARCHAR(100) );

        SELECT @Location

        INSERT INTO #PayGroupList EXEC CareCentral.[svr].[spSvrPayGroupsGet_V1] @Location

        SELECT * FROM #PayGroupList;

        SELECT @PayGroupList = @PayGroupList + PayGroupId +  N',' FROM #PayGroupList;

        IF (LEN(@PayGroupList) > 0)
        BEGIN
            SET @PayGroup = '''' + SUBSTRING(@PayGroupList, 1, (LEN(@PayGroupList)-1))  + ''''
        END

        SELECT @PayGroup;
    END

insert 语句没有填充 temptable。 #PayGroupList


Alter Procedure [svr].[spSvrPayDateGet_V1]
@LocationList NVARCHAR(MAX),
@PayGroupList NVARCHAR(MAX)
AS

SET NOCOUNT ON

BEGIN

    WITH ctePayDates
    AS
    (
        SELECT DISTINCT Location, 
        LocationId = CASE   
                WHEN Location='111111' THEN CAST(LEFT(Location, LEN(Location) -2) AS NVARCHAR(50))
                WHEN SUBSTRING(Location, 5, 1) <> '0' THEN CAST(LEFT(Location, LEN(Location) -1) AS NVARCHAR(50))
                ELSE CAST(LEFT(Location, LEN(Location) -2) AS nvarchar(50))
                END,
        PayGroup, PayDate
        FROM Carecentral.svr.Summary  
    )

        SELECT DISTINCT PayDate FROM ctePayDates 
        WHERE LocationId IN (Select value from String_Split(@LocationList, ',')) AND PayGroup IN (Select value from String_Split(@PayGroupList, ','))

END

Full Proc:
ALTER   Procedure [svr].[spSvrBranchReviewsGet]
@Location nVARCHAR(Max),            --Comma delimited string or All
@PayGroup nVARCHAR(Max),            --Comma delimited string  or All
@ApprovalStatus VARCHAR(10),        --Yes, No or All
@PayDate nVARCHAR(Max),             --Comma delimited string or All
@Division_ID VARCHAR(1000) = NULL,
@UserID INT = NULL,
@IsAdminCorp BIT                    --Admin or not

AS
Set NoCount ON


IF (@Location = 'All')
    BEGIN

        DECLARE @UserBranchesList NVARCHAR(MAX)= ''
        
        IF OBJECT_ID('tempdb.dbo.#UserBranchesList') IS NOT NULL
        BEGIN
            DROP TABLE #UserBranchesList;
        END
    
        CREATE TABLE #UserBranchesList( BranchId NVARCHAR(100), BranchName NVARCHAR(100)    )

        INSERT INTO #UserBranchesList EXEC [svr].[spSvrUserBranchesGET] @Division_ID, @UserID ,@IsAdminCorp

        SELECT @UserBranchesList = @UserBranchesList + BranchId + N',' FROM #UserBranchesList WHERE BranchId IS NOT NULL 

        IF (LEN(@UserBranchesList) > 0)
        BEGIN
            SET @Location = '''' + SUBSTRING(@UserBranchesList, 1, (LEN(@UserBranchesList)-1))  + ''''
        END

        SELECT @Location

    END

IF (@PayGroup = 'All')
    BEGIN
    
        DECLARE @PayGroupList NVARCHAR(MAX)= ''
        
        IF OBJECT_ID('tempdb.dbo.#PayGroupList') IS NOT NULL
        BEGIN
            DROP TABLE #PayGroupList;
        END
    
        CREATE TABLE #PayGroupList( PayGroupId NVARCHAR(100) );

        SELECT @Location

        INSERT INTO #PayGroupList EXEC CareCentral.[svr].[spSvrPayGroupsGet_V1] @Location

        SELECT * FROM #PayGroupList;

        SELECT @PayGroupList = @PayGroupList + PayGroupId +  N',' FROM #PayGroupList;

        IF (LEN(@PayGroupList) > 0)
        BEGIN
            SET @PayGroup = '''' + SUBSTRING(@PayGroupList, 1, (LEN(@PayGroupList)-1))  + ''''
        END

        SELECT @PayGroup;
    END


IF (@PayDate = 'All')
    BEGIN

        DECLARE @PayDateList NVARCHAR(MAX)=''
        
        IF OBJECT_ID('tempdb.dbo.#PayDateList') IS NOT NULL
        BEGIN
            DROP TABLE #PayDateList;
        END
    
        CREATE TABLE #PayDateList( PayDate VARCHAR(100) )

        INSERT INTO #PayDateList EXEC CareCentral.[svr].[spSvrPayDateGet_V1] @Location, @PayGroup

        SELECT * FROM #PayDateList

        SELECT @PayDateList = @PayDateList + PayDate + N',' FROM #PayDateList       

        SELECT @PayDateList

        IF (LEN(@PayDateList) > 0)
        BEGIN
            SET @PayDate = '''' + SUBSTRING(@PayDateList, 1, (LEN(@PayDateList)-1)) + ''''
        END

        SELECT @PayDate

    END
sql sql-server database tsql
© www.soinside.com 2019 - 2024. All rights reserved.