2017-09-21 69 views
0

如何直接在SQLSERVER中将逗号分隔值传递给存储过程?如何直接在SQL中将逗号分隔值传递给存储过程

ALTER PROCEDURE [dbo].[CM_GetUnreadCount_ByUserJid_bilal_onlyfortesting] (@UserID AS VARCHAR(MAX)) 
AS 
DECLARE @myTable TABLE (
    MessageId BIGINT, 
    RecieverId VARCHAR(100) 
    ) 

INSERT INTO @myTable (
    MessageId, 
    RecieverId 
    ) 
SELECT MAX(MessageID), 
    ReceiverID 
FROM dbo.CM_MessageStatus 
WHERE ReceiverID IN (@UserID) 
    AND DeliveredDate IS NOT NULL 
GROUP BY ReceiverID 

EXEC [CM_GetUnreadCount_ByUserJid_bilal_onlyfortesting] '123', '456' 

错误:

Msg 8144, Level 16, State 2, Procedure CM_GetUnreadCount_ByUserJid_bilal_onlyfortesting, Line 0 Procedure or function CM_GetUnreadCount_ByUserJid_bilal_onlyfortesting has too many arguments specified.

回答

1

你需要写

exec [CM_GetUnreadCount_ByUserJid_bilal_onlyfortesting] '123,456' 

然后你需要string_split它存储的过程中,就像这样:

注意 - 你只能使用string_split在2016年,否则你需要做一些其他的东西,如XML路径

CREATE PROCEDURE [dbo].[CM_GetUnreadCount_ByUserJid_bilal_onlyfortesting] (@UserID AS VARCHAR(MAX)) 
AS 


DECLARE @myTable TABLE 
         (
          MessageId BIGINT, 
          RecieverId VARCHAR(100) 
         ) 

DECLARE @UserTable TABLE 
(UserId varchar(MAX) 
) 
INSERT INTO @UserTable (UserID) 
select * from string_split(@UserID,','); 

        INSERT INTO @myTable 
          (MessageId, RecieverId) 
        SELECT MAX(MessageID),RecieverID 
         FROM  dbo.Message_status 
         WHERE  RecieverID IN (select * from @UserTable) 
           AND DeliveredDate IS NOT NULL 
           GROUP BY RecieverID 

           --RETURN OUTPUT TO TEST 
           Select * from @myTable 
相关问题