2016-03-12 3 views
0

Здравствуйте, я пытаюсь создать запрос, который будет проходить через таблицу на моем сервере sql, но проблема в том, что мне нужно отфильтровать запрос определенной частью одного из столбцов таблицы. Так, например поле таблицы (и пример значение) показаны ниже (имя таблицы сверху и значение непосредственно ниже):Цикл через SQL-таблицу с частью столбца

PDID  PDDescription  PDFilename  PDDocumentLocation PDDocumentTypeID 
77234  PDF for FRT  FRT_154327  PD Documents\154487  11 

Проблема в том, мне нужно фильтровать по номеру секции PDDocumentlocation, как I будет иметь набор номеров PD, и эти числа будут сопоставляться с «PD Documents \ ####» в этом разделе -> ###, есть ли способ создать запрос цикла, который вытащил бы эти значения на основе части столбец? Также, если возможно, я могу ссылаться на местоположение папки в SQL? и для PDDocumentLocation он всегда будет начинаться с PD-документов, если это поможет. Спасибо! Я пробовал переходить по играм через таблицы, но я не могу найти что-либо на итерации на основе параметра, такого как список чисел, и ссылаясь на искусство столбца. Любая помощь приветствуется.

Например, если у меня есть список номеров PD, таких как 12456,13788, 23456, то я хочу, чтобы запрос возвращал все строки, у которых есть эти числа, и эти числа поступают из столбца «PDDocumentLocation» и все значения в этом столбец начинается с «Документов PD», а список номеров соответствует следующим образом: документы PD \ 12456, документы PD \ 13788, документы PD \ 23456

+0

Пожалуйста, отредактируйте ваш вопрос и укажите примеры того, что вы хотите сохранить и что хотите фильтровать. –

+0

@ GordonLinoff только что сделал! Я прошу прощения за то, что не уточнил ранее. Я надеюсь, что это лучше. –

+0

Возможный дубликат [Есть ли комбинация «LIKE» и «IN» в SQL?] (Http://stackoverflow.com/questions/3014940/is-there-a -combination-of-like-and-in-in-sql) –

ответ

0

Вы знаете префикс (постоянная корневая папка) и суффикс (список номеров) , шаблон размещения неизменен. Вместо синтаксического анализа используйте более простой способ - добавьте свою корневую папку к указанным числам и получите полное имя местоположения. Вам не нужно извлекать «часть столбца», потому что вы знаете полные значения этого столбца.

GO 
declare @RootFolder varchar(1000) = 'PD Documents\' 

declare @FileFolders table 
(
    PDName varchar(1000) 
) 

declare @PDDocumentLocation table 
(
    PDDocumentLocation varchar(1000) 
) 

/* incoming list */ 
insert into @FileFolders(PDName) 
values ('12456'), ('13788'), ('23456') 


/* stored data */ 
insert into @PDDocumentLocation(PDDocumentLocation) 
values 
    ('PD Documents\154487'), 
    ('PD Documents\12456'), 
    ('PD Documents\13788'), 
    ('PD Documents\13788_'), 
    ('PD Documents\17211') 

/* preparing filter */ 
update f set 
    PDName = @RootFolder + f.PDName 
from @FileFolders f 

select d.* 
from @PDDocumentlocation d 
where exists 
    (
    select 1 from @FileFolders ff 
    where ff.PDName = d.PDDocumentLocation 
) 
order by d.PDDocumentLocation 
GO 
+0

благодарим за ответ! У меня вопрос, если вы не возражаете, поэтому в скрипте мне нужно будет делать вставку каждый раз? как это было бы переменной? и поэтому, что это делает из того, что я вижу, форматирует числа, вставляя их в созданную вами таблицу temp, а затем фильтр фильтрует через фактическую таблицу с этими данными? Я прошу прощения за все вопросы, которые я все еще изучаю в sql, и я новичок в Loops и форматировании, я ценю всю помощь! –

+0

Вы не можете передать массив чисел ['123', '1234', '5435'] в сохраненный proc. Вам нужно будет поместить их в аргумент табличного типа (вставить перед вызовом SP) или передать их как длинную строку 'varchar', проанализировать внутри SP и вставить в переменную таблицы или перечислить список номеров с клиентской стороны. –

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