Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сервак путает CTE и хинт ?  [new]
Букака
Guest
Использую with в конструкции

from table_1 t1 with(nolock)
join table_2 t2 with(nolock)
on ...

при этом выдается ошибка

Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

как будто скуль воспринимает with как определение CTE.

В чем подвох ?
11 апр 13, 14:40    [14167353]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Поставьте перед WITH ";".
11 апр 13, 14:41    [14167363]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Извиняюсь, не прочитал внимательно.
11 апр 13, 14:42    [14167372]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
1. Покажите всю конструкцию;
2. Огласите SELECT @@version и уровень совместимости БД.
11 апр 13, 14:46    [14167396]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Букака
from table_1 t1 with(nolock)
join table_2 t2 with(nolock)
on ...
В чем подвох ?

Подвох в том, что вы показали вместо текста вашего запроса некий отрывок, на котором эта ошибка не может возникнуть.
11 апр 13, 14:47    [14167400]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
nezhadnye_my
Guest
убрать вообще это with,
хинт и без него катит
from table_1 t1 (nolock)
join table_2 t2 (nolock)
on ...
;
если ошибка не уйдет, то with какой-то не из хинта
(кликнуть на ошибку и пусть покажет, какой именно with)
11 апр 13, 14:52    [14167430]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
nezhadnye_my,

BOL->Omitting the WITH keyword is a deprecated feature: This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.
11 апр 13, 14:56    [14167473]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
Букака
Guest
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)

Ошибка при накате следующего скрипта :

CREATE PROCEDURE [dbo].[proc_name]

@datefrom datetime
,@dateto datetime
,@source_data varchar(512)
,@type_cause varchar(128)
AS
BEGIN
SET NOCOUNT ON;

IF @datefrom IS NULL AND @dateto IS NULL


DECLARE @source_d table
(
[RaspString] varchar(128)
)
INSERT INTO @source_d
(
[RaspString]
)
SELECT RaspString FROM ParsingString('1','|',@source_data)


SELECT cast([abr] as varchar(256)) as Enterprise
,sum(cast(
(case when isnumeric([board_template])= 1
then replace ( (case when [board_template] not like '%[0-9]%' then '1' else [board_template]
end)
,',',
'.')
else '1'
end)
as decimal(10,2))) as CountMeasurements


FROM [dbo].[(Контроль Качества)_(ptc)] kk WITH(NOLOCK)
INNER JOIN [dbo].[vStatistics_all] vs WITH(NOLOCK,NOEXPAND)
ON kk.[unid]=vs.[ParentDocUNIDs]
INNER JOIN [dbo].[(Справочники)_(Card)] sc WITH(NOLOCK)
ON kk.enterpriseinitiator=sc.name
INNER JOIN @source_d as SourceD
ON kk.[source_data] LIKE '' + SourceD.RaspString + '%'

WHERE vs.[statusCode] = 260
AND vs.[server_time_at_create] BETWEEN @datefrom AND @dateto

AND kk.[type_cause] = @type_cause

GROUP BY [abr]

ORDER BY [abr]
END


как видно - скрипт простенький, with не так много...
11 апр 13, 15:16    [14167618]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
на 10.50.4000.0 ошибок нет.
11 апр 13, 15:21    [14167657]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
nezhadnye_my
Guest
pkarklin,
можно же временно with поубирать, никто не успеет умереть )))
для чистоты эксперимента
11 апр 13, 15:22    [14167663]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
nezhadnye_my
убрать вообще это with,
хинт и без него катит
Я наоборот везде у нас WITH в хинтах расставил,
когда на 2005-й переходили
Хотя и очень не хотелось.
11 апр 13, 15:23    [14167675]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
А [dbo].[(Контроль Качества)_(ptc)] и [dbo].[(Справочники)_(Card)] у Вас часом не табличные функции?
11 апр 13, 15:28    [14167726]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
Букака
Guest
Jovanny,

нет, это таблицы
11 апр 13, 15:37    [14167807]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Букака
Jovanny,

нет, это таблицы
Патчить надо
11 апр 13, 15:43    [14167865]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Так тогда у Вас ошибка в другом.
IF @datefrom IS NULL AND @dateto IS NULL


DECLARE @source_d table
(
[RaspString] varchar(128)
)


Т.е., если @datefrom IS NULL AND @dateto IS NULL, то табличная переменная @source_d объявляется, а если нет, то будем без неё. :)
11 апр 13, 15:43    [14167869]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
hoha_ftf
Member

Откуда: ЕКБ
Сообщений: 42
nezhadnye_my
убрать вообще это with,
хинт и без него катит

А потом вместо таблицы появится синоним, который смотрит на линкованный сервер, и все сломается
11 апр 13, 21:03    [14169665]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Букака
Microsoft SQL Server 2008 R2


И использовать грязное чтение вместо версионности?
11 апр 13, 21:13    [14169706]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
БУкака
Guest
Jovanny,

там две строки которые присваивают переменным значение, удалил их что бы не нагромождать скрипт. Так что проблема не в этом.
12 апр 13, 11:13    [14171531]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
Букака
Guest
pkarklin, верное замечание, это отдельный вопрос к автору скрипта, и вероятно он будет исправлен, однако хотелось бы узнать саму причину.
12 апр 13, 11:19    [14171573]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
nezhadnye_my
Guest
hoha_ftf
nezhadnye_my
убрать вообще это with,
хинт и без него катит

А потом вместо таблицы появится синоним, который смотрит на линкованный сервер, и все сломается


во блин-то, предлагается заменить на 1 минуту,
чтобы посмотреть, повторится ли ошибка.
потому как есть подозрение, что дело совсем не в with.
вот убираем его и смотрим, исчезла ошибка или нет.
вообще это в соседнем окне проделать можно, исходный код пусть остается нетронутым
12 апр 13, 11:29    [14171635]     Ответить | Цитировать Сообщить модератору
 Re: Сервак путает CTE и хинт ?  [new]
Букака
Guest
Спасибо всем за участие, ошибка найдена - человеческий фактор. Процедура на сервере отличается от процедуры в скрипте по ошибке разработчика.

Модераторам - думаю тему можно удалить, пользы, кроме урока про "кривые ручки" она не несет.
12 апр 13, 13:02    [14172290]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить