Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 WITH не хочет работать после объявление переменной  [new]
super-code
Member

Откуда:
Сообщений: 244
Выполняю код:

WITH t
AS(
    SELECT newid() as [t1]
	union
	SELECT newid() as [t1]
)
select * from t as t1,t as t2


Все отлично.

Выполняю:

declare @name_uniozation nvarchar(200) = null


Все отлично.

Теперь комбинация:

declare @name_uniozation nvarchar(200) = null

WITH t
AS(
    SELECT newid() as [t1]
	union
	SELECT newid() as [t1]
)
select * from t as t1,t as t2



Ошибка:

Msg 319, Level 15, State 1, Line 5
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.

Что я делаю не так?
5 сен 12, 15:02    [13118154]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
Glory
Member

Откуда:
Сообщений: 104760
super-code
or a change tracking context clause, the previous statement must be terminated with a semicolon.
5 сен 12, 15:04    [13118173]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
aleks2
Guest
1. Сервис-паки ставить надо.
2. Перед ;WITH должна быть точка с запятой - учиться надо.
5 сен 12, 15:07    [13118190]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
super-code,

Пора привыкать к этому:

statement;
another statement;
5 сен 12, 15:10    [13118208]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
super-code
Member

Откуда:
Сообщений: 244
aleks2,

спасибо, помогло. А можно узнать, почему надо ставить точку с запятой?
5 сен 12, 15:10    [13118209]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 898
aleks2,
А как сделать вставку из виртуального представления в обычную таблицу?
5 сен 12, 15:11    [13118212]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
super-code
Member

Откуда:
Сообщений: 244
pkarklin, теперь вот так пишут на t-sql. У нас куча кода и в без точки с запятой, будет разный стиль :(
5 сен 12, 15:12    [13118215]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
Glory
Member

Откуда:
Сообщений: 104760
super-code
А можно узнать, почему надо ставить точку с запятой?

Приблизительно по той же причине, почему надо писать with
5 сен 12, 15:12    [13118218]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
super-code
теперь вот так пишут на t-sql. У нас куча кода и в без точки с запятой, будет разный стиль :(


Ну, пока он будет работать...
5 сен 12, 15:12    [13118222]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
Glory
Member

Откуда:
Сообщений: 104760
Yagrus2
А как сделать вставку из виртуального представления в обычную таблицу?

Все вставки делаются командой insert.
5 сен 12, 15:12    [13118224]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
super-code
Member

Откуда:
Сообщений: 244
Вообще у меня отложилось в памяти, что в каких-то случаях или СУБД ';' используется для отделения пакетов, вместо GO.
5 сен 12, 15:13    [13118228]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
super-code
Member

Откуда:
Сообщений: 244
pkarklin, а потом? Произошли какие-то изменения в стандарте t-sql, теперь после оператора необходимо писать ';', верно?
5 сен 12, 15:16    [13118246]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
super-code
Вообще у меня отложилось в памяти, что в каких-то случаях или СУБД ';' используется для отделения пакетов, вместо GO.
Точку с запятой все версии MSSQL понимают как конец инструкции (statement). Даже в SQL2000!
Это во многих языках программирования так принято.
5 сен 12, 15:18    [13118264]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
super-code,


Features Not Supported in a Future Version of SQL Server

The following SQL Server Database Engine features are supported in the next version of SQL Server, but will be removed in a later version. The specific version of SQL Server has not been determined.

CategoryDeprecated featureReplacement
Transact-SQLNot ending Transact-SQL statements with a semicolonEnd Transact-SQL statements with a semicolon ( ; )


http://technet.microsoft.com/en-us/library/ms143729.aspx
5 сен 12, 15:20    [13118287]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
super-code
Member

Откуда:
Сообщений: 244
iap, благадарю, вроде стала ясность в голове. Почему тогда эта точка с запятой не обязательна... вопрос к создателям t-sql
5 сен 12, 15:20    [13118290]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
nezhadnye_my
Guest
super-code
pkarklin, а потом? Произошли какие-то изменения в стандарте t-sql, теперь после оператора необходимо писать ';', верно?


Transact-SQL Syntax Conventions

;
Transact-SQL statement terminator.Although the semicolon is not required for most statements in this version of SQL Server, it will be required in a future version.
5 сен 12, 15:20    [13118292]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
super-code
Member

Откуда:
Сообщений: 244
pkarklin, то, что надо, СУПЕР!
5 сен 12, 15:21    [13118300]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 898
Glory,
de
clare @T TABLE 
(
Parent	VARCHAR(10),
unit	VARCHAR(10),
t int
)
insert into @T
WITH X (unit, N,Depth)
AS
(
SELECT	unit,  CAST(unit + ' --> 'AS VARCHAR(100)) AS N, 0
FROM	TTT
WHERE	Parent IS NULL  
UNION ALL
SELECT	E.unit, CAST(X.N + E.unit + ' --> '  AS VARCHAR(100)),x.depth+1
FROM	TTT AS E
INNER JOIN  X 
ON	E.Parent = X.unit
)  
select * from x


получаю ошибку:
Msg 156, Level 15, State 1, Line 8
Incorrect syntax near the keyword 'WITH'.
Msg 319, Level 15, State 1, Line 8
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.
5 сен 12, 15:21    [13118304]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 898
Выше опечатка
declare @T TABLE 
(
Parent	VARCHAR(10),
unit	VARCHAR(10),
t int
)
5 сен 12, 15:23    [13118321]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
Glory
Member

Откуда:
Сообщений: 104760
Синтаксис нужно учить по хелпам. А не придумывать самому
declare @T TABLE 
(
Parent	VARCHAR(10),
unit	VARCHAR(10),
t int
)
;WITH X (unit, N,Depth)
AS
(
SELECT	unit,  CAST(unit + ' --> 'AS VARCHAR(100)) AS N, 0
FROM	TTT
WHERE	Parent IS NULL  
UNION ALL
SELECT	E.unit, CAST(X.N + E.unit + ' --> '  AS VARCHAR(100)),x.depth+1
FROM	TTT AS E
INNER JOIN  X 
ON	E.Parent = X.unit
)  
insert into @T
select * from x
5 сен 12, 15:24    [13118336]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
nezhadnye_my
Guest
super-code
iap, благадарю, вроде стала ясность в голове. Почему тогда эта точка с запятой не обязательна... вопрос к создателям t-sql

вначале синтаксис T-SQL был простой и, видать, и без терминатора код отлично парсился.
как появились конструкции посложнее, после/перед ними стали требовать ;
например, перед with и после merge
5 сен 12, 15:25    [13118338]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 898
Glory,

Msg 8152, Level 16, State 14, Line 7
String or binary data would be truncated.

The statement has been terminated.
5 сен 12, 15:27    [13118361]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
Glory
Member

Откуда:
Сообщений: 104760
Yagrus2
Glory,

Msg 8152, Level 16, State 14, Line 7
String or binary data would be truncated.

The statement has been terminated.

И что вам непонятно в этом сообщении ?
5 сен 12, 15:28    [13118366]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
nezhadnye_my
Guest
ну так и в табличной переменной сделайте длину варчаров 100
(пихаете в поля длиной 10)
5 сен 12, 15:29    [13118382]     Ответить | Цитировать Сообщить модератору
 Re: WITH не хочет работать после объявление переменной  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 898
Glory,
Все понял)
5 сен 12, 15:30    [13118393]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить