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

Откуда:
Сообщений: 52
MSSQL 2000

Пытаюсь выполнить скрипт:

declare @tmp float;
set @tmp=12345678;
exec('print ('+cast(@tmp as bigint)+')');

Выдает ошибку:
Server: Msg 170, Level 15, State 1, Line 3
Line 3: Incorrect syntax near 'cast'.

Причем
print (cast(@tmp as bigint));

работает без ошибок.

Почему и как обойти?
23 окт 09, 11:02    [7828077]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Почему и как обойти?

ну, нельзя в exec выражения использовать, кроме псевдоконкатенации.
обход очевиден - сначала составить строку, а потом уже exec.

Posted via ActualForum NNTP Server 1.4

23 окт 09, 11:04    [7828111]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
M_Fighter
Member

Откуда:
Сообщений: 52
1. Почему нельзя?
2. Пробовал, почти аналогично - выдает ошибку во время выполнения exec
23 окт 09, 11:06    [7828131]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
Glory
Member

Откуда:
Сообщений: 104760
M_Fighter
1. Почему нельзя?
2. Пробовал, почти аналогично - выдает ошибку во время выполнения exec

1. Потому что нельзя
2. Вы не пробуете сначала смотреть, что за скрипт вы генерируете в такой строке ?
23 окт 09, 11:09    [7828155]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> 1. Почему нельзя?

патамушта. синтаксис такой.

> 2. Пробовал, почти аналогично - выдает ошибку во время выполнения exec

что пробовали-то?
declare @tmp float;
set @tmp=12345678;

declare @msg varchar(100)
set @msg = 'print (' + cast(@tmp as bigint) +')'
exec(@msg);

Posted via ActualForum NNTP Server 1.4

23 окт 09, 11:09    [7828156]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> set @msg ='print (' +cast(@tmpas bigint) +')'

set @msg = 'print ('+cast(cast(@tmp as bigint) as varchar(100))+')'

Posted via ActualForum NNTP Server 1.4

23 окт 09, 11:11    [7828178]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Стесняюсь спросить, а скобки в PRINTе зачем?
И bigint надо явно в varchar сконвертировать...
23 окт 09, 11:13    [7828193]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
M_Fighter
Member

Откуда:
Сообщений: 52
declare @tmp float;
declare @msg varchar(200);

set @msg = 'print ('+cast(cast(@tmp as bigint) as varchar(100))+')'
exec @msg;

Server: Msg 2812, Level 16, State 62, Line 5
Could not find stored procedure ''.

Еще идеи?

iap - привычка С++
23 окт 09, 11:22    [7828279]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
Glory
Member

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


Еще идеи?


Есть идея изучать синтаксис
Потому что exec @msg и exec(@msg) - это разные конструкции
23 окт 09, 11:23    [7828291]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
M_Fighter
Member

Откуда:
Сообщений: 52
Пример выше:

declare @tmp float;
set @tmp=12345678;

declare @msg varchar(100)
set @msg = 'print (' + cast(@tmp as bigint) +')'
exec(@msg);


Результат во время выполнения:
Server: Msg 8114, Level 16, State 5, Line 5
Error converting data type varchar to bigint.
23 окт 09, 11:24    [7828297]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Еще идеи?

> exec @msg;

скобки - это iap про print говорил, а не про exec.

Posted via ActualForum NNTP Server 1.4

23 окт 09, 11:24    [7828306]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
Glory
Member

Откуда:
Сообщений: 104760
M_Fighter
Пример выше:

declare @tmp float;
set @tmp=12345678;

declare @msg varchar(100)
set @msg = 'print (' + cast(@tmp as bigint) +')'
exec(@msg);


Результат во время выполнения:
Server: Msg 8114, Level 16, State 5, Line 5
Error converting data type varchar to bigint.

Вы точно понимаете, что хотите сделать ?
Вы осознаете, что написали в Line 5 скрипта ?
Вы прочитали сообщение об ошибке ?
23 окт 09, 11:26    [7828319]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
M_Fighter
Пример выше:

declare @tmp float;
set @tmp=12345678;

declare @msg varchar(100)
set @msg = 'print (' + cast(@tmp as bigint) +')'
exec(@msg);


Результат во время выполнения:
Server: Msg 8114, Level 16, State 5, Line 5
Error converting data type varchar to bigint.
То есть, либо CAST в VARCHAR, либо скобки в EXEC?
Третьего не дано?
23 окт 09, 11:26    [7828323]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
M_Fighter
Member

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

Да, с exec промахнулся - отвлекают просто
23 окт 09, 11:26    [7828327]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
M_Fighter
Member

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

я скопировал 1 в 1 пример daw - все вопросы к автору :)
23 окт 09, 11:27    [7828336]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> я скопировал 1 в 1 пример daw - все вопросы к автору :)

а я поправился следующим же постом (править сообщения на этом форуме нельзя).
2 и 2 сложить можете?

Posted via ActualForum NNTP Server 1.4

23 окт 09, 11:28    [7828348]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
iap
Member

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

я скопировал 1 в 1 пример daw - все вопросы к автору :)
Так он же поправился!
23 окт 09, 11:28    [7828351]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
Glory
Member

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

я скопировал 1 в 1 пример daw - все вопросы к автору :)

Т.е. самому понять скрипт из трех команд не по силам или просто в лом ?
23 окт 09, 11:29    [7828357]     Ответить | Цитировать Сообщить модератору
 Re: Проблема exec + cast  [new]
M_Fighter
Member

Откуда:
Сообщений: 52
Мда, дружелюбие прет. А всего-то нужно было написать 1 скрипт без ошибок, и ткнуть в MSDN где конкретно написано почему нельзя использовать ничего кроме конкатенации. Всем спасибо, тема закрыта.
23 окт 09, 11:32    [7828393]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить