2017-09-05 15 views
0

以下のようなSPを作成しました。ここではカンマ区切りの値を@IDパラメータに渡す必要があります。私はsplit関数を与えました。私は1つの値をIDとして与えるだけでうまくいきます。私はあなたがSQLサーバーは、次のことをしようと使用しているカンマ区切り値の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

タグあなたが使用しているDBMSを作成します。そのコードは製品固有です。 – jarlh

+0

ここでも「分割」機能を投稿してください。 – Rajan

答えて

0

SPに(「123」、456)のようにカンマ区切りを与えるためにSPのためのexec文を変更する必要がありますどのように親切に役立ちます。

データベース機能を作成します

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/ –

関連する問題