2016-02-02 2 views
0

Таким образом, пользователь вводит номер политики в форме: 2000, 2001, 2002Как запустить sql-запрос для каждой записи пользователем?

Мне нужно запустить запрос для каждого из этих трех номеров политик. Я не уверен, как это сделать.

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

declare @sql1 varchar(1000) 

declare @policy varchar(1000) 

set @policy = '2000, 2001, 2002' 

--THIS IS WHERE i NEED HELP??? 
set @policy = replace(@policy, ' ', '') 

set @policy = '''' + replace(@policy, ',', ''',''') + '''' 

print (@policy) 


if @policy <> 'null' 
set @sql1 = 
(SELECT top 1 
     [MIL]  
FROM 
     [DataManagement].[dbo].[lookuptable] where [policy] = @policy group by [MIL]) 
exec (@sql1) 
print(@sql1) 
+0

Пожалуйста, используйте только теги, которые использовались. Является ли это 'mysql' или' sql-server', если оба они объяснят в вопросе – HoneyBadger

+0

На самом деле, я сожалею, что это сервер sql – GurkaranSingh

ответ

0

Варианты:

  1. Вы уверены, что вам действительно нужно один набор результатов за единицу в @policy и не один результирующий набор, который соответствует любому из идентификаторов? Запрос IN позволит вам получить этот результат - к сожалению, вы не можете делать WHERE IN (@List), но его можно объединить в динамический запрос (проблемы с SQL-инъекцией в стороне - убедитесь, что ваш источник данных, но это относится ко всему это принимает входные данные, как вы, кажется,
  2. Если вы объявляете @Policy в качестве переменной типа таблицы, то вы можете передать ее как список идентификаторов и просто пропустить ее. (Дополнительная информация - http://blog.sqlauthority.com/2008/08/31/sql-server-table-valued-parameters-in-sql-server-2008/, https://www.brentozar.com/archive/2014/02/using-sql-servers-table-valued-parameters/)
  3. Нет недостатка в примерах из кода, чтобы разделить строковый список с разделителями на таблицу значений. Это позволит сделать то же, что и в пункте 2.
  4. FOR XML PATH ('') трюк может использоваться для получения таблицы результатов и сглаживания ее в одну переменную. Если вы jo в таблице против ваших значений и в результате вы получите запрос SELECT из вашего вопроса, вы можете сделать один EXEC без необходимости в цикле.

Зависит от того, что вы хотите для своей окружающей среды. Я бы использовал вариант 2, чтобы разбить строку, а затем собрать комбинированный одиночный запрос, используя FOR XML PATH и выполнить его. Но для некоторых сред подход к табличным параметрам и петлям определенно был бы выше.

+0

Можете ли вы предоставить мне пример для точки 2? – GurkaranSingh

+0

@ user3276031 Добавлены ссылки, HTH – eftpotrm

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