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

Откуда: Норильск
Сообщений: 940
Всем хорошего дня. Опишу все по порядку, есть временная таблица, вот ее код:

DECLARE @t TABLE (nomer int, Баланс NUMERIC(18,2))

INSERT INTO @t
select distinct nomer, replace(Баланс,',','.') from opendatasource
('Microsoft.Jet.OLEDB.4.0','Data Source=D:\Баланс.xls;Extended Properties=Excel 8.0')...[Лист1$]


Далее необходимо добавить в таблицу table_main одну колонку с текущей датой и временем (добавляю ее в динамическом запросе)

DECLARE @name_column AS VARCHAR(255)

SET @name_column =  '[' + convert(varchar(50), GETDATE(), 104) + ' ' + convert(varchar(50), DATEPART ( hh , GETDATE()), 108) + ':00]'
execute('ALTER TABLE table_main ADD ' + @name_column + ' MONEY NULL')


А вот далее необходимо в эту таблицу table_main обновить поле, которое мы создали выше, исходя из определенных условий.
Делаю так (в динамическом запросе):

execute ('UPDATE table_main SET '+@name_column+' = Баланс from @t a, table1 b
WHERE a.nomer=b.nomer') 

Соответственно, ошибка выдается

Msg 137, Level 15, State 2, Line 1
Must declare the variable '@t'.


Понятно, что @t объявлена внутри, и в динамичесокм запросе он ее не видит. Как это правильно побороть или правильно переписать код. Заранее спасибо.
27 фев 14, 08:13    [15637216]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Update и временная таблица  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Не, с табличными переменными так не пойдет.
Перепешите
DECLARE @t TABLE (nomer int, Баланс NUMERIC(18,2))

на
CREATE TABLE #t (nomer int, Баланс NUMERIC(18,2))

и везде обращение к @t поменяйте на обращение к #t.
27 фев 14, 08:26    [15637245]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Update и временная таблица  [new]
Настенька
Member

Откуда: Норильск
Сообщений: 940
Мне нельзя создавать таблицу, в том то и дело, надо только с табличными переменными. Может, как-то можно создать глобальную табличную переменную, которая будет и в динамическом запросе видна?
27 фев 14, 08:49    [15637315]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Update и временная таблица  [new]
aleks2
Guest
Настенька
Мне нельзя создавать таблицу, в том то и дело, надо только с табличными переменными. Может, как-то можно создать глобальную табличную переменную, которая будет и в динамическом запросе видна?


Ну дык... нафега те динамический запрос ваще?
27 фев 14, 08:59    [15637347]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Update и временная таблица  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Настенька
Мне нельзя создавать таблицу, в том то и дело, надо только с табличными переменными.
Это почему?
У вас препод над душой что ли стоит?
27 фев 14, 08:59    [15637349]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Update и временная таблица  [new]
Настенька
Member

Откуда: Норильск
Сообщений: 940
Ну народ, какой препод, это по работе. :-)) Кто-нибудь по существу скажет ответ?
27 фев 14, 09:02    [15637361]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Update и временная таблица  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Настенька,

вы свято верите, что табличные переменные живут только в памяти, а временные таблицы создаются на диске?
27 фев 14, 09:07    [15637382]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Update и временная таблица  [new]
Настенька
Member

Откуда: Норильск
Сообщений: 940
Я думала, может, есть какой-то другой подход кроме создания таблицы, про него я изначально знала.
27 фев 14, 09:12    [15637407]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Update и временная таблица  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А вы ВЕСЬ код заверните в единый динамический - тогда сработает и с табличной переменной. Естественно, ALTER TABLE сделав отдельно и первым.

Сообщение было отредактировано: 27 фев 14, 09:17
27 фев 14, 09:17    [15637428]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Update и временная таблица  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2414
Настенька
Ну народ, какой препод, это по работе.


а что за работа, в которой запрещено создавать временные таблицы, но можно использовать табличные переменные?
27 фев 14, 09:36    [15637494]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Update и временная таблица  [new]
aleks2
Guest
StarikNavy
что за работа?

Настенька
Норильск.


Суровые норильские недоучки.
27 фев 14, 11:58    [15638580]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Update и временная таблица  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
StarikNavy
Настенька
Ну народ, какой препод, это по работе.


а что за работа, в которой запрещено создавать временные таблицы, но можно использовать табличные переменные?
Например, SSIS пакет который свалится с ошибкой при попытке извлечь метаданные из процедуры в которой создается временная таблица.
28 фев 14, 01:54    [15643802]     Ответить | Цитировать Сообщить модератору
 Re: Динамический Update и временная таблица  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Почему временные нельзя, что за табу? Сделайте select * into #t1 from @tt .
28 фев 14, 16:08    [15647473]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить