2011-01-04 3 views
1

Как я могу использовать sp_executesql с динамическими параметрами значенияDynamic SQl с хранимой процедурой

Я хочу, чтобы сгенерировать значение параметра с помощью петли из разделенных запятых или что-то вроде этого

declare @sql nvarchar(1000), @answer nvarchar(1000) 
set @sql='SELECT TOP 1000 [UserID] 
     ,[DateOfBirth] 
     ,[UserActivityType] 
     ,[FirstName] 
     ,[LastName] 
     ,[Gender] 
    FROM [LogX].[dbo].[UserDetails] where [email protected] and gender [email protected] ' 
    set @values = '"jack","1"' 
    EXEC sp_executesql @sql , N'@name nvarchar(100),@gender tinyint',@values 

пожалуйста знать что может быть более двух параметров Любая идея? спасибо.

ответ

0

попробовать этот

declare @sql nvarchar(1000), @answer nvarchar(1000) 
set @sql='SELECT TOP 1000 [UserID] 
     ,[DateOfBirth] 
     ,[UserActivityType] 
     ,[FirstName] 
     ,[LastName] 
     ,[Gender] 
    FROM [LogX].[dbo].[UserDetails] where firstname='[email protected]+' and gender ='[email protected] 
    set @values = '"jack","1"' 
    EXEC sp_executesql @sql , N'@name nvarchar(100),@gender tinyint',@values 

использование строку concatination для передачи параметров

+1

Что относительно '@name = '; отбрасывать таблицы; - 'Я не буду downvote, потому что это действительный ответ на вопрос, хотя, но это идея baddddd IMO – Spence

+0

Спасибо Spence да, это действительно большая ошибка – Kiarash

0

Вы знаете, что ВСЯ точка sp_executesql это мешает вам делать конкатенации. Вы можете использовать библиотеку, такую ​​как linq, для динамического генерации запросов для вас, которые затем будут использовать sp_Executesql.

Конкатенация строк в SQL-запросах - это ключевой вектор атаки против веб-сайтов и приложений под названием SQL Injection. SQL Injection at wikipedia

0

Вам нужно будет разобрать строку значений CSV в разные переменные, а затем перейти к sp_executesql - нет никакого пути к этому, когда вы выполняете параметризованный SQL, как и вы (что именно вы должны делать).

В противном случае вы будете пытаться выполнить (ужасную) конкатенацию строк для своего динамического SQL вместо параметрирования, что было бы плохо.

+0

Не могли бы вы рассказать мне, как? Я имею в виду, как я могу создать несколько параметров на лету? Потому что там будет 1 или 10 из них, вы знаете его динамичный Большое спасибо. – Kiarash

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