2017-09-05 45 views
0

我創建了一個如下所示的SP。我將不得不將逗號分隔值傳遞給@ID參數。我給出了分割函數。只有當我給一個值作爲ID時,它才能正常工作。請幫我應如何改變exec語句的SP給予逗號分隔值一樣(「123」,456)用於逗號分隔值的sql中的exec語句

EXEC usp_2090_AppRej '54862','','' 

ALTER PROCEDURE [dbo].[usp_2090_AppRej] 
@ID VARCHAR(100) 
,@Comments VARCHAR(1000) = '' 
,@ReturnMessage VARCHAR(500) OUTPUT 

DECLARE @tblBPM TABLE (ids INT) 
INSERT INTO @tblBPM 
SELECT items 
FROM dbo.Split(@ID, ',') 
+1

標籤您正在使用的數據庫管理系統。該代碼是特定於產品的。 – jarlh

+0

發佈'拆分'功能也在這裏。 – Rajan

回答

0

您正在使用SQL Server嘗試以下到SP。

創建數據庫功能

ALTER FUNCTION [dbo].[fnSplit] 
    (
     @sInputList VARCHAR(max) -- List of delimited items 
     , 
     @sDelimiter VARCHAR(max) = ',' -- delimiter that separates items 
    ) 
RETURNS @List TABLE (item VARCHAR(max)) 
    BEGIN 
     DECLARE @sItem VARCHAR(max) 
     WHILE CHARINDEX(@sDelimiter, @sInputList, 0) <> 0 
      BEGIN 
       SELECT @sItem = RTRIM(LTRIM(SUBSTRING(@sInputList, 1, 
                 CHARINDEX(@sDelimiter, 
                   @sInputList, 0) 
                 - 1))) , 
         @sInputList = RTRIM(LTRIM(SUBSTRING(@sInputList, 
                  CHARINDEX(@sDelimiter, 
                   @sInputList, 0) 
                  + LEN(@sDelimiter), 
                  LEN(@sInputList)))) 

       IF LEN(@sItem) > 0 
        INSERT INTO @List 
          SELECT @sItem 
      END 

     IF LEN(@sInputList) > 0 
      INSERT INTO @List 
        SELECT @sInputList -- Put the last item in 
     RETURN 
    END 

創建SP

CREATE PROCEDURE [dbo].[usp_2090_AppRej] 
    @ID VARCHAR(100), 
    @Comments VARCHAR(1000) = '', 
    @ReturnMessage VARCHAR(500) OUTPUT 
AS 
BEGIN 
    DECLARE @tblBPM TABLE (ids INT) 
    INSERT INTO @tblBPM 
      SELECT item 
      FROM dbo.fnSplit(@ID, ',') 

END 
+0

解析/分割函數有更多的高性能技術。我也有類似的功能,並對性能增益感到震驚。看一眼http://www.sqlservercentral.com/articles/Tally+Table/72993/ –