2016-11-03 5 views
0

Inventory_view_03テーブルから値とフィルタ情報を入力し、それらのデータをTrn_note_headerに挿入するプロシージャを作成しましたが、プロシージャは正しく動作しています。Paas一度に1つのパラメータに複数の値を使用SP

2つ以上入力した場合、入力に1つの値を挿入すると機能しませんが、エラーは表示されません。

問題点を教えていただけますか? 2つ以上を入力すると

CREATE PROCEDURE insertrecord 
@KITITEM Varchar(20) 
AS 
BEGIN 

DECLARE @LASTNO int 
IF (@LASTNO IS NULL) OR (LEN(@LASTNO) > 0) 
BEGIN 
    SET @LASTNO= 0 
END 


SELECT @LASTNO=ISNUMERIC([Trn_number])from [dbo].[Trn_note_header] 
SET @[email protected]+1 

insert into[dbo].[Trn_note_header]([Trn_number],[kit_number],[Supplier],[Season],[Pcs]) 
select @LASTNO,[trb_kit_desc],[shortname],[se_name],[Expr1] From[dbo].[Inventory_view_03] 
WHERE trb_kit_desc IN(@KITITEM) 

End 
+0

SQLクライアントでサポートされている場合は、テーブル値のパラメータを使用することをお勧めします。 –

+0

話題にならない: 'DECLARE @LASTNO ...'で始まる行を 'DECLARE @LASTNO INT = 0;'で置き換えることができます。これにより同じ結果が得られます。またISNUMERICがあなたが望むことをやっているのかどうかはわかりません。 –

+0

こんにちはありがとうございました。データベースから最後の番号を取得したい場合、coloumを1からインクリメントしてから、それを挿入したいのですが、どうすればこの部分にこのクエリを挿入できますか? –

答えて

0

あなたがいずれかを入力し、入力がこの

trb_kit_desc IN('a') 

のように見え、入力はこの

trb_kit_desc IN('a,b,c') 

のように見えるあなたのクエリに一致する値ではありません、thatsの理由は、動作しません..

あなたの挿入を以下のように変更することができます値は、あなたがここからの機能のいずれかを使用してこれらの値を分割する必要があります。https://sqlperformance.com/2012/07/t-sql-queries/split-strings

;with cte 
as 
(
select * from dbo.split_strings(@KITITEM,',') 
) 
insert into[dbo].[Trn_note_header]([Trn_number],[kit_number],[Supplier],[Season],[Pcs]) 
select @LASTNO,[trb_kit_desc],[shortname],[se_name],[Expr1] From[dbo].[Inventory_view_03] 
WHERE trb_kit_desc IN(select item from cte) 
0

あなたは、動的T-SQLステートメントを構築し、それを実行することができます。たとえば:あなたはこのような文字列として文を構築することができ

  • DECLARE @DynamicSQLStatement NVARCHAR(MAX); 
    
    SET @KITITEM = REPLACE(@KITITEM, ',', ''','''); 
    
    SET @DynamicSQLStatement = 'insert into[dbo].[Trn_note_header]([Trn_number],[kit_number],[Supplier],[Season],[Pcs]) 
    select ' + CAST(@LASTNO AS VARCHAR(12)) + ',[trb_kit_desc],[shortname],[se_name],[Expr1] From[dbo].[Inventory_view_03] 
    WHERE trb_kit_desc IN(''@KITITEM'')'; 
    
    EXEC sp_executesql @DynamicSQLStatementN, '@KITITEM Varchar(20), @LASTNO INT', @KITITEM, @LASTNO; 
    

DECLARE @DynamicSQLStatement NVARCHAR(MAX); 

SET @DynamicSQLStatement = 'insert into[dbo].[Trn_note_header]([Trn_number],[kit_number],[Supplier],[Season],[Pcs]) 
select ' + CAST(@LASTNO AS VARCHAR(12)) + ',[trb_kit_desc],[shortname],[se_name],[Expr1] From[dbo].[Inventory_view_03] 
WHERE trb_kit_desc IN(''' + REPLACE(@KITITEM, ',', ''',''') +''')'; 

EXEC sp_executesql @DynamicSQLStatement 
  • あなたは、このようなsp_executesqlプロシージャに変数を渡すことができますとにかく、これは別の方法ですが、私があなたの場合は、@ Thのsplinting値を使って解を使用しますeGameiswar。

  • 関連する問題