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

Откуда:
Сообщений: 186
Подскажите, пожалуйста, почему происходит эта ошибка? Ведь выше объявлена была @TAB1

Msg 137, Level 16, State 1, Line 104
Необходимо объявить скалярную переменную "@TAB1".


Код примерно такой:
Declare @Tab1 Table (Stroka1 nchar(6), Stroka2 char (6))
insert into @Tab1 
select * from Table666


Declare @Tab2 Table (Stroka3 nchar(6), Stroka4 char (6))
insert into @Tab2
EXEC
('select *
from Table555 left join '+ @Tab1 + ' on Stroka555=Stroka1')
31 июл 14, 11:43    [16380883]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при запуске EXEC  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1938
LisSp,

либо sp_executesql

либо собрать строку до exec
31 июл 14, 11:45    [16380899]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при запуске EXEC  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
@Tab1 - таблица, а не строка.
Как же можно к строке добавить таблицу??
31 июл 14, 11:45    [16380903]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при запуске EXEC  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1938
iap
@Tab1 - таблица, а не строка.
Как же можно к строке добавить таблицу??


точно! не поглядел внимательно... тогда только собрать до exec
31 июл 14, 11:46    [16380915]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при запуске EXEC  [new]
LisSp
Member

Откуда:
Сообщений: 186
Shurgenz
iap
@Tab1 - таблица, а не строка.
Как же можно к строке добавить таблицу??


точно! не поглядел внимательно... тогда только собрать до exec


спасибо! теперь всё работает)
31 июл 14, 11:55    [16380975]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при запуске EXEC  [new]
mrGuest
Guest
LisSp
Подскажите, пожалуйста, почему происходит эта ошибка? Ведь выше объявлена была @TAB1

Msg 137, Level 16, State 1, Line 104
Необходимо объявить скалярную переменную "@TAB1".


Код примерно такой:
Declare @Tab1 Table (Stroka1 nchar(6), Stroka2 char (6))
insert into @Tab1 
select * from Table666


Declare @Tab2 Table (Stroka3 nchar(6), Stroka4 char (6))
insert into @Tab2
EXEC
('select *
from Table555 left join '+ @Tab1 + ' on Stroka555=Stroka1')


Во-первых использование exec в данном случае выглядит странным.
Достаточно было бы использовать подход:
insert into DstTable select ... from SrcTable


Во-вторых инструкции внутри exec выполняются в отдельном сеансе, который ничего не знает о локальных переменных объявленных вне выполняемой инструкции. Именно поэтому Вы получили такую ошибку.
declare	@a int
select	@a = 1
exec ('select @a')


Можно было бы решить следующим способом:
declare	@a int
set	@a = 1
exec ('declare @a int set @a = 1 select @a')
31 июл 14, 13:04    [16381468]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить