2016-07-20 9 views
1

テーブルに挿入する値をカンマ区切りの値として1つの変数に取り込み、変数を使用してinsert intoステートメントを実行する方法はありますか。単一変数SQLストアドプロシージャからテーブル値に挿入

declare @test as varchar(60) ; 
set @test = '10,''john'''; 

今使用たとえば、変数を宣言し、以下に示すようにカンマ区切りでテーブルに挿入する値があると、変数の値を設定

create table id_test (id int, name varchar(10)) 

としてテストテーブルを作成しますこの質問をした理由は、私が保存したWebページからすべての変数を渡したくない、ということである

insert into id_test (id,name) values(@test) 

として insert intoで変数 @testプロシージャ。代わりに、カンマで区切られた値を保持するWebページから1つの変数を渡して、テーブルに挿入する必要があります。

+0

最も良い方法は、すべての変数の値を別のパラメータとして渡すことです。あなたの方法はSQLインジェクション – Madhivanan

+0

Madhivananにつながるでしょう、何か特別な理由がありますか?私は、各テーブルがより多くの列数を持つので、個々の変数を渡す代わりに1つの変数を持つことをお勧めします。 – bhuvana

+2

はいそれはSQLインジェクションにつながるstackoverflow.com/questions/601300/what-is-sql-injection – Madhivanan

答えて

1

動的クエリを使用すると、これを達成できます。変数宣言後のストアドプロシージャで

declare @test as varchar(60); 
set @test = '10,''john'''; 

declare @sql AS VARCHAR(MAX) = 'insert into id_test (id, name) values('[email protected]+')' 

--USE EXEC() to execute your insert command 
EXEC(@sql) 
+0

ありがとう@JaydipJ !!できます!! – bhuvana

+0

SQLインジェクション攻撃には一見隙がないように見えます。 –

関連する問題