2013-05-12 2 views
0

Левый парнер сразу после «в @gutsTVP» нарушает это.
Ошибки на правом Paren по линии 12.
Если удалить этот первый набор скобок вокруг первого союза он работает, но он возвращает неверный ответ, то пересекаются применяются до первого союзаОшибка синтаксиса с использованием ведущей скобки с вставкой в ​​

DECLARE @gutsTVP AS TABLE (sID INT PRIMARY KEY); 
insert into @gutsTVP 
(
     select distinct [ftsIndexWordOnce].[sID] 
     from [ftsIndexWordOnce] with (nolock) 
     where [ftsIndexWordOnce].[wordID] in (1,2) 
    union 
     select distinct [ftsIndexWordOnceB].[sID] 
     from [ftsIndexWordOnceB] with (nolock) 
     where [ftsIndexWordOnceB].[wordID] in (5,6) 
) 
intersect 
(
     select distinct [ftsIndexWordOnce].[sID] 
     from [ftsIndexWordOnce] with (nolock) 
     where [ftsIndexWordOnce].[wordID] in (9,10,11,12) 
    union 
     select distinct [ftsIndexWordOnceB].[sID] 
     from [ftsIndexWordOnceB] with (nolock) 
     where [ftsIndexWordOnceB].[wordID] in (13,14,15,16) 
) 
select [guts].[sID] from @gutsTVP as [guts] 
join [docSVsys] with (nolock) 
    on [docSVsys].[sID] = [guts].[sID] 
order by [docSVsys].[sParID], [docSVsys].[sID] 

Включено окончательное соединение, так как это является целью ТАБЛИЦЫ.
Если я присоединяюсь к производной таблице, он не знает о ПК и намного медленнее.

Да, я знаю, это может привести к повторному коэффициенту этого, чтобы у него не было левого переднего пара.
Это упрощенный запрос.
Нужно иметь возможность обрабатывать левый верхний левый палец.

Ниже приведено описание синтаксиса в работе.
Но теперь соединение происходит медленнее, так как оно не известно о ПК.
Не может иметь Sid как PK и принять нулевую

DECLARE @gutsTVP AS TABLE (sID INT PRIMARY KEY); 
insert into @gutsTVP 
select 0 -- real PK starts at 1 
union 
(  
     select distinct [ftsIndexWordOnce].[sID] 
     from [ftsIndexWordOnce] with (nolock) 
     where [ftsIndexWordOnce].[wordID] in (1,2) 
    union 
     select distinct [ftsIndexWordOnceB].[sID] 
     from [ftsIndexWordOnceB] with (nolock) 
     where [ftsIndexWordOnceB].[wordID] in (5,6) 
) 
intersect 
(
     select distinct [ftsIndexWordOnce].[sID] 
     from [ftsIndexWordOnce] with (nolock) 
     where [ftsIndexWordOnce].[wordID] in (9,10,11,12) 
    union 
     select distinct [ftsIndexWordOnceB].[sID] 
     from [ftsIndexWordOnceB] with (nolock) 
     where [ftsIndexWordOnceB].[wordID] in (13,14,15,16) 
) 
select [guts].[sID] from @gutsTVP as [guts] 
join [docSVsys] with (nolock) 
    on [docSVsys].[sID] = [guts].[sID] 
where [guts].[sID] > 0 
order by [docSVsys].[sParID], [docSVsys].[sID] 

ответ

2

Попробуйте КТР вместо:

DECLARE @gutsTVP AS TABLE (sID INT PRIMARY KEY); 
; WITH a AS (
     select [ftsIndexWordOnce].[sID] 
     from [ftsIndexWordOnce] with (nolock) 
     where [ftsIndexWordOnce].[wordID] in (1,2) 
    union 
     select [ftsIndexWordOnceB].[sID] 
     from [ftsIndexWordOnceB] with (nolock) 
     where [ftsIndexWordOnceB].[wordID] in (5,6) 
) 
, b AS (
     select [ftsIndexWordOnce].[sID] 
     from [ftsIndexWordOnce] with (nolock) 
     where [ftsIndexWordOnce].[wordID] in (9,10,11,12) 
    union 
     select [ftsIndexWordOnceB].[sID] 
     from [ftsIndexWordOnceB] with (nolock) 
     where [ftsIndexWordOnceB].[wordID] in (13,14,15,16) 
) 
insert into @gutsTVP 
SELECT * FROM a 
    intersect 
SELECT * FROM b; 

select [guts].[sID] from @gutsTVP as [guts] 
join [docSVsys] with (nolock) 
    on [docSVsys].[sID] = [guts].[sID] 
order by [docSVsys].[sParID], [docSVsys].[sID] 

Также обратите внимание, что вы можете отказаться от distinct сек, так как они уже вытекает из union с.

+0

Я мог бы удалить отчет, но он работает значительно медленнее - на самом деле. Это работает +1, но я хочу создать этот синтаксис линейным образом. Я обновил свою работу. – Paparazzi

+0

Выглядит хорошо. Параны немного сложны - без INSERT ваш исходный запрос становится синтаксически правильным. Но когда начальный параграф сразу следует за INSERT, SQL Server ожидает список столбцов, а не набор значений. –

+0

При дальнейшем тестировании это работает лучше, чем мой взлом – Paparazzi

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

  • Нет связанных вопросов^_^