Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / объявление переменной до with / 25 сообщений из 29, страница 1 из 2
23.01.2019, 09:11
    #39763214
Domianos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
Здравствуйте уважаемые форумчане.
Подобная тема уже есть на форуме, на на мой взгляд название темы не отражает суть, да и решение проблемы из неё я так и не нашёл
Задача:
есть некий код
Код: sql
1.
2.
3.
4.
with d as ( select * from Dogovors where type_id = @type_id and first_date <= @last_date and @first_date <= last_date )
  select * 
    from d 
    where not exists( select * from d as d1 where d.Client_id = d1.Client_id and d.first_date <= d1.last_date and d1.first_date <= d.last_date )



задача: определить переменные @type_id, @first_date, @last_date

пробую через declare перед with

Код: sql
1.
2.
3.
4.
5.
DECLARE
@first_date date = '2018-12-01',
@last_date date = '2018-12-31',
@type_id int = 1
WITH...


ошибка:
Код: sql
1.
[Err] 42000 - [SQL Server]Неправильный синтаксис около ключевого слова "with". Если эта инструкция является обобщенным табличным выражением, предложением xmlnamespaces или предложением в контексте отслеживания изменений, предыдущую инструкцию необходимо завершить точкой с запятой.



пробую поставить ; после завершения инструкции declare
Код: sql
1.
2.
3.
4.
5.
6.
DECLARE
@first_date date = '2018-12-01',
@last_date date = '2018-12-31',
@type_id int = 1
;
WITH...


получаю ошибку
Код: sql
1.
[Err] 42000 - [SQL Server]Необходимо объявить скалярную переменную "@last_date".
...
Рейтинг: 0 / 0
23.01.2019, 09:19
    #39763220
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
Domianos,
вы ищете не там, где потеряли...
в вашей ситуации все говорит о том, что @last_date в декларации и @last_date в запросе - две разные вещи. Сделайте их одинаковыми. Для чего проверьте все буковки, особенно схожие по виду с кириллицей.
...
Рейтинг: 0 / 0
23.01.2019, 09:47
    #39763236
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
Domianos,

Суть в том, что у вас MySql
...
Рейтинг: 0 / 0
23.01.2019, 10:19
    #39763254
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
Domianos
Код: sql
1.
2.
3.
4.
5.
6.
DECLARE
@first_date date = '2018-12-01',
@last_date date = '2018-12-31',
@type_id int = 1
;
WITH...

А так сработает?
Код: sql
1.
2.
3.
4.
5.
6.
7.
DECLARE @first_date date;
DECLARE @last_date date;
DECLARE @type_id int;
SET @first_date = '2018-12-01';
SET @last_date = '2018-12-31';
SET @type_id = 1;
WITH...
...
Рейтинг: 0 / 0
23.01.2019, 10:19
    #39763255
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
Domianos,

и что возвращает
Код: sql
1.
PRINT @@VERSION;

???
...
Рейтинг: 0 / 0
23.01.2019, 11:00
    #39763283
Domianos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
TaPaK,
да нет, это ms sqlserver
...
Рейтинг: 0 / 0
23.01.2019, 11:00
    #39763284
Domianos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
iap,

[SQL]PRINT @@VERSION
Microsoft SQL Server 2008 (SP3) - 10.0.5512.0 (Intel X86)
Aug 22 2012 15:16:00
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)

Affected rows: 0
Time: 0.024s
...
Рейтинг: 0 / 0
23.01.2019, 11:01
    #39763285
Domianos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
iapDomianos
Код: sql
1.
2.
3.
4.
5.
6.
DECLARE
@first_date date = '2018-12-01',
@last_date date = '2018-12-31',
@type_id int = 1
;
WITH...

А так сработает?
Код: sql
1.
2.
3.
4.
5.
6.
7.
DECLARE @first_date date;
DECLARE @last_date date;
DECLARE @type_id int;
SET @first_date = '2018-12-01';
SET @last_date = '2018-12-31';
SET @type_id = 1;
WITH...



нет. таже ошибка
...
Рейтинг: 0 / 0
23.01.2019, 11:02
    #39763286
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
Domianos,

полностью запрос показывайте
...
Рейтинг: 0 / 0
23.01.2019, 11:03
    #39763287
Domianos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
Sergey SizovDomianos,
вы ищете не там, где потеряли...
в вашей ситуации все говорит о том, что @last_date в декларации и @last_date в запросе - две разные вещи. Сделайте их одинаковыми. Для чего проверьте все буковки, особенно схожие по виду с кириллицей.

попробовал, нет
тут суть в том что почемуто в with он не видит декларированные до него переменные,
а вот в основном селекте - без проблем
...
Рейтинг: 0 / 0
23.01.2019, 11:06
    #39763293
Domianos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
TaPaKDomianos,

полностью запрос показывайте

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
DECLARE
@first_date date = '2018-12-01',
@last_date date = '2018-12-31',
@type_id int = 1;
with d as ( select * from Dogovors where  first_date <= @last_date and @first_date <= last_date and type_id = @type_id )
  select * 
    from d
    where not exists( select * from d as d1 where d.Client_id = d1.Client_id and d.first_date <= d1.last_date and d1.first_date <= d.last_date )
go
...
Рейтинг: 0 / 0
23.01.2019, 11:07
    #39763294
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
Domianos,

всё он "видит"
ты вместо того, что бы "диагнозы ставить", код полностью показал

Код: sql
1.
2.
3.
4.
declare @n int=100
;with cte as 
	(select * from master..spt_values where number<@n)
select * from cte 
...
Рейтинг: 0 / 0
23.01.2019, 11:08
    #39763296
Domianos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
таблица
Код: sql
1.
2.
3.
4.
5.
6.
Dogovors(
	Client_id	int 	not null 	-- клиент
	,type_id	int 	not null		-- тип договора
	,first_date	date	not null		-- первый день действия договора
	,last_date	date			-- последний день действия договора (м.б. не указан)
)
...
Рейтинг: 0 / 0
23.01.2019, 11:10
    #39763301
Domianos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
courtDomianos,

всё он "видит"
ты вместо того, что бы "диагнозы ставить", код полностью показал

Код: sql
1.
2.
3.
4.
declare @n int=100
;with cte as 
	(select * from master..spt_values where number<@n)
select * from cte 



сделал под свою таблицу
Код: sql
1.
2.
3.
4.
declare @n int=1
;with cte as 
	(select * from Dogovors where type_id=@n)
select * from cte 



ошибка
Код: sql
1.
[Err] 42000 - [SQL Server]Необходимо объявить скалярную переменную "@n".
...
Рейтинг: 0 / 0
23.01.2019, 11:11
    #39763302
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
DomianoscourtDomianos,

всё он "видит"
ты вместо того, что бы "диагнозы ставить", код полностью показал

Код: sql
1.
2.
3.
4.
declare @n int=100
;with cte as 
	(select * from master..spt_values where number<@n)
select * from cte 



сделал под свою таблицу
Код: sql
1.
2.
3.
4.
declare @n int=1
;with cte as 
	(select * from Dogovors where type_id=@n)
select * from cte 



ошибка
Код: sql
1.
[Err] 42000 - [SQL Server]Необходимо объявить скалярную переменную "@n".



Указанные запросы рабочие и на 2008
...
Рейтинг: 0 / 0
23.01.2019, 11:12
    #39763303
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
Domianos
Код: sql
1.
2.
3.
4.
declare @n int=1
;with cte as 
	(select * from Dogovors where type_id=@n)
select * from cte

а ты где это всё выполняешь ?
Не SSMS-е ?
...
Рейтинг: 0 / 0
23.01.2019, 11:13
    #39763305
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
судя по тексту ошибок это через какой-то ODBC, смотрите что там
...
Рейтинг: 0 / 0
23.01.2019, 11:20
    #39763309
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
Domianos,

в общем, на крайняк, можно все твои переменные задать в ещё одном сте и дальше использовать
типа
Код: sql
1.
2.
3.
4.
5.
6.
with 
d0 as (select cast('2018-12-01' as date) as first_date, cast('2018-12-31' as date) as last_date, 1 as type_id )
,d as ( select * from Dogovors d1 cross join d0 where d1.type_id = d0.type_id and d1.first_date <= d0.last_date and d0.first_date <= d1.last_date )
  select * 
    from d 
    where not exists( select * from d as d1 where d.Client_id = d1.Client_id and d.first_date <= d1.last_date and d1.first_date <= d.last_date )
...
Рейтинг: 0 / 0
23.01.2019, 11:20
    #39763310
Domianos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
делаю в Navicat Premium в разделе Query

хах, мб действительно в этом трабла
...
Рейтинг: 0 / 0
23.01.2019, 11:21
    #39763311
Domianos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
court,

спасибо, если что попробую
...
Рейтинг: 0 / 0
23.01.2019, 11:24
    #39763313
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
Domianosiap,

[SQL]PRINT @@VERSION
Microsoft SQL Server 2008 (SP3) - 10.0.5512.0 (Intel X86)
Aug 22 2012 15:16:00
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)

Affected rows: 0
Time: 0.024sА что вернёт это:
Код: sql
1.
EXEC sp_dbcmptlevel <ИмяБазы>

???
...
Рейтинг: 0 / 0
23.01.2019, 11:26
    #39763314
Domianos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
iap,

Код: sql
1.
2.
3.
4.
5.
6.
[SQL]EXEC sp_dbcmptlevel ARCHDOC_1

Текущий уровень совместимости 100.

Affected rows: 0
Time: 0.033s
...
Рейтинг: 0 / 0
23.01.2019, 11:27
    #39763315
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
Domianosiap,

Код: sql
1.
2.
3.
4.
5.
6.
[SQL]EXEC sp_dbcmptlevel ARCHDOC_1

Текущий уровень совместимости 100.

Affected rows: 0
Time: 0.033s

Всё должно работать. Я тут у себя проверил...
Попробуйте, всё же, в MS SQL ManagerStudio выполнить.
...
Рейтинг: 0 / 0
23.01.2019, 11:30
    #39763317
Domianos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
iap,

проверил в SSMS действительно все работает,
ох уж этот Navicat.
всем спасибо!!!

вопрос закрыт!
...
Рейтинг: 0 / 0
23.01.2019, 11:44
    #39763327
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объявление переменной до with
Domianosделаю в Navicat Premium в разделе Query

хах, мб действительно в этом траблаУдивительно, как это у него получается, он что, запросы правит, перед тем, как отослать их на сервер???
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / объявление переменной до with / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]