2013-06-20 3 views
0
SELECT * FROM SYS.COLUMNS WHERE 
NAME NOT IN (SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'XXXX' 
AND PATINDEX('%' + COLUMN_NAME + '%', 'ABC;XYZ') <> 0); 

В таблице XXXX есть столбцы как XY, AB, ABC, XYZ. Теперь я хочу исключить только столбцы XYZ и ABC и хранить столбцы AB и XY, используя PATINDEX. Я не могу это сделать, потому что исключается только первый столбец. И если я удаляю начало % от PATINDEX, то оба XYZ a XY удаляются. Как я могу это решить.SQL PATINDEX сервер, чтобы соответствовать точной строке

ответ

1

Вы хотите CHARINDEX, а не PATINDEX.

SELECT * FROM SYS.COLUMNS 
    WHERE NAME NOT IN (
     SELECT COLUMN_NAME 
     FROM INFORMATION_SCHEMA.COLUMNS 
     WHERE TABLE_NAME = 'XXXX' 
     AND CHARINDEX(COLUMN_NAME + ';', 'ABC;XYZ;') > 0 
    ); 
+0

Что я хочу знать, так это то, что следует поместить имена столбцов с помощью разделителя ';' или есть лучший способ? Также ваш запрос выбирает как «XY», так и «XYZ», что не является желаемым поведением. –

+1

См. Обновленный ответ для решения XY и XYZ selection - added ';' terminator для поиска строк. Неважно, что такое разделитель, поскольку вы ищете вхождения строк. – kgu87

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