2016-07-20 6 views
1

Есть ли способ захватить значения, которые нужно вставить в таблицу, в одну переменную как значения, разделенные запятой, и использовать переменную для выполнения инструкции insert into. Например, можно создать тестовую таблицу какВставить в значения таблицы из хранимой процедуры одной переменной SQL

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

объявить переменную и установить значение для переменной, чтобы быть значения, которые будут вставлены в таблицу с запятой, разделенных, как показано ниже:

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

В настоящее время используют переменная @test в insert into как

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

Причина за этот вопрос заключается в том, я не хочу, чтобы передать все переменные из веб-страницы, хранимая процедура. Вместо этого я хочу передать одну переменную с веб-страницы, которая содержит значения, разделенные запятой, которые нужно вставить в таблицу.

+0

Лучший способ - передать все значения переменных в качестве отдельного параметра. Ваш метод приведет к SQL Injection – Madhivanan

+0

@Madhivanan, есть ли какие-либо конкретные причины для этого? Я подумал, что лучше иметь одну переменную вместо передачи отдельных переменных, поскольку каждая таблица имеет большее количество столбцов. – bhuvana

+2

да это приводит к sql injection 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-инъекций. –

Смежные вопросы