Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Динамическое изменение типа  [new]
Valerii
Member

Откуда:
Сообщений: 749
Народ, хочу "на лету" менять тип переменой
SELECT @maxLenght = MAX(Len(RTRIM(text))) from Branches

select CAST(ISNULL(lstInvent.text,'Start: '+p.text) as VARCHAR(@maxLenght)) AS text,
ISNULL(lstInvent.data, @xStDatetIme) as Data,
p.id AS LocCode
from branches p

SQL ругается
Line 4: Incorrect syntax near '@maxLenght'.
Что не так?
11 сен 17, 14:22    [20786859]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое изменение типа  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3708
Valerii
Народ, хочу "на лету" менять тип переменой
SELECT @maxLenght = MAX(Len(RTRIM(text))) from Branches

select CAST(ISNULL(lstInvent.text,'Start: '+p.text) as VARCHAR(@maxLenght)) AS text,
ISNULL(lstInvent.data, @xStDatetIme) as Data,
p.id AS LocCode
from branches p

SQL ругается
Line 4: Incorrect syntax near '@maxLenght'.
Что не так?



как объявлена
@maxLenght?


так же с ошибкой в слове или без?

@maxLenght? @maxLength?
11 сен 17, 14:25    [20786875]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое изменение типа  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Valerii,

автор
as VARCHAR(@maxLenght)

а как это должно работать по вашему?
11 сен 17, 14:27    [20786882]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое изменение типа  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3708
TaPaK
Valerii,

автор
as VARCHAR(@maxLenght)

а как это должно работать по вашему?


"Динамическое изменение типа"

11 сен 17, 14:28    [20786894]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое изменение типа  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Ролг Хупин,

автор
"Динамическое изменение типа"
тогда динамический sql
11 сен 17, 14:28    [20786898]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое изменение типа  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36972
Зачем эти приседания? Максимальная длина у обыного варчара 8000, объявите ее и не мучайтесь.
11 сен 17, 14:31    [20786913]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое изменение типа  [new]
Valerii
Member

Откуда:
Сообщений: 749
Ролг Хупин
Valerii
Народ, хочу "на лету" менять тип переменой
SELECT @maxLenght = MAX(Len(RTRIM(text))) from Branches

select CAST(ISNULL(lstInvent.text,'Start: '+p.text) as VARCHAR(@maxLenght)) AS text,
ISNULL(lstInvent.data, @xStDatetIme) as Data,
p.id AS LocCode
from branches p

SQL ругается
Line 4: Incorrect syntax near '@maxLenght'.
Что не так?



как объявлена
@maxLenght?

int


так же с ошибкой в слове или без?

@maxLenght? @maxLength?
11 сен 17, 14:42    [20786963]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое изменение типа  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Valerii,

с чего вы решили что ЭТО ВООБЩЕ должно работать
11 сен 17, 14:43    [20786971]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое изменение типа  [new]
_human
Member

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

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/declare-local-variable-transact-sql
Variables can be used only in expressions, not in place of object names or keywords. To construct dynamic SQL statements, use EXECUTE.
11 сен 17, 14:52    [20787014]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое изменение типа  [new]
Valerii
Member

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

че-то так подумало почему бы нет... ;-)
Тем не менее спасибо... будем знать ...
11 сен 17, 15:02    [20787062]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое изменение типа  [new]
Alozar
Member

Откуда:
Сообщений: 141
А зачем чётко определять длину varchar? Он же всё равно в памяти занимает место ровно по длине данных в нём.
11 сен 17, 15:36    [20787263]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое изменение типа  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3708
Гавриленко Сергей Алексеевич
Зачем эти приседания? Максимальная длина у обыного варчара 8000, объявите ее и не мучайтесь.


чтобы совсем не мучиться: MAX и проехали
11 сен 17, 15:39    [20787278]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое изменение типа  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Alozar
А зачем чётко определять длину varchar? Он же всё равно в памяти занимает место ровно по длине данных в нём.

1. Вопрос проектирования.
2. Вопрос индексов вытекая из 1го
3. если не ошибаюсь оптимизатор прикидывает сколько страниц надо поднимать исходя из типов данных
11 сен 17, 15:43    [20787306]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить