2012-01-05 4 views
3

В схеме таблицы, как показано нижеTSQL Как выбрать сотрудника с навыками в столбце XML

CREATE TABLE [dbo].[Employee](
    [EmployeeId] [uniqueidentifier] NOT NULL, 
    [Name] [nvarchar](50) NOT NULL, 
    [Location] [nvarchar](50) NOT NULL, 
    [Skills] [xml] NOT NULL 
CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
  • Как бы я получить сотрудники, имеющие C# (чувствительно к регистру) навыки программирования, предполагая, XML, сохраненный в Skills столбцах как показано ниже.

  • Не могли бы вы советы других функций поможет мне фильтровать, сортировать, используя столбцы типа данных XML

<Skills><Skill>C#</Skill><Skill>ASP.NET</Skill><Skill>VB.NET</Skill></Skills>

ответ

3

Сравнение чувствительно к регистру, так что вам нужно сравнить против обоих C# и C#. В SQL Server 2008 вы можете использовать upper-case.

declare @T table 
(
    ID int identity, 
    Skills XML 
) 

insert into @T values 
('<Skills><Skill>C#</Skill><Skill>ASP.NET</Skill><Skill>VB.NET</Skill></Skills>') 
insert into @T values 
('<Skills><Skill>CB.NET</Skill><Skill>ASP.NET</Skill><Skill>c#</Skill></Skills>') 
insert into @T values 
('<Skills><Skill>F#</Skill><Skill>ASP.NET</Skill><Skill>VB.NET</Skill></Skills>') 

select ID 
from @T 
where Skills.exist('/Skills/Skill[contains(., "C#") or contains(., "c#")]') = 1 

Результат:

ID 
----------- 
1 
2 

Update:

Это также будет работать.

select T.ID 
from @T as T 
    cross apply T.Skills.nodes('/Skills/Skill') as X(N) 
where X.N.value('.', 'nvarchar(50)') like '%C#%' 
+0

- это случай сравнения по умолчанию?, Можно ли использовать функцию 'contains' в where where? – Deeptechtons

+0

@Deeptechtons - Да, он чувствителен к регистру по умолчанию, и вы можете использовать его как это. ''/ Skills/Skill [содержит (верхний регистр (.)," C# ")]'' –

+0

вот так? 'select * from Employee, где Skills.query ('/ Skills/Skill [содержит (верхний регистр (.)," C# ")]')' weird, я также получаю ошибку 'Нет функции '{http: // www .w3.org/2004/07/xpath-functions}: upper-case() ' ' – Deeptechtons