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

Откуда:
Сообщений: 179
Делаем выборку, по постоянно меняющемуся списку id (@spisok_id), в не динамическом виде все работает

@spisok_id NVARCHAR(max)

AS
BEGIN

DECLARE @sSQL NVARCHAR(max);

-- отберем все содержимое ттн-к и привяжем к id_zaiavki
SET @sSQL='select t.id_zaiav, t.to_dep, t.dep_name, ts.umd, ts.kod, ts.quan into #t1 '+  
'from ttns t, ttns_soderg ts '+   
'where t.id_ttn=ts.id_ttn and t.id_zaiav IN ('+@spisok_id+') '+  
'order by id_zaiav, to_dep, umd, kod'

EXEC(@sSQL)



Выдает ошибку: Invalid object name '#t1'. Может кто знает почему?
20 ноя 13, 15:26    [15162448]     Ответить | Цитировать Сообщить модератору
 Re: Динамический SQL запрос - ошибка  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alex-ZZZ
Выдает ошибку: Invalid object name '#t1'. Может кто знает почему?

Потому что такого объекта нет
20 ноя 13, 15:28    [15162467]     Ответить | Цитировать Сообщить модератору
 Re: Динамический SQL запрос - ошибка  [new]
o-o
Guest
у меня никакую ошибку не выдает:
DECLARE @sSQL NVARCHAR(max);
SET @sSQL='select 1 as col1, 2 as col2 into #t1'
EXEC(@sSQL)
--------------------------
(1 row(s) affected)
20 ноя 13, 15:34    [15162543]     Ответить | Цитировать Сообщить модератору
 Re: Динамический SQL запрос - ошибка  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Alex-ZZZ,

А что выведет "PRINT @sSQL"?
20 ноя 13, 15:34    [15162548]     Ответить | Цитировать Сообщить модератору
 Re: Динамический SQL запрос - ошибка  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Alex-ZZZ
Выдает ошибку: Invalid object name '#t1'. Может кто знает почему?

Телепатирую: ошибка возникает у вас не в этом коде, а потом, когда вы пытаетесь сделать выборку из #t1.
20 ноя 13, 15:37    [15162571]     Ответить | Цитировать Сообщить модератору
 Re: Динамический SQL запрос - ошибка  [new]
Alex-ZZZ
Member

Откуда:
Сообщений: 179
Понимаю, что при EXEC(@sSQL) - #t1 создается и сразу дропается, а как это обойти?
20 ноя 13, 15:38    [15162581]     Ответить | Цитировать Сообщить модератору
 Re: Динамический SQL запрос - ошибка  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alex-ZZZ
Понимаю, что при EXEC(@sSQL) - #t1 создается и сразу дропается, а как это обойти?

Создавать таблицу _предварительно_

А еще лучше избавится от динамического запроса

Сообщение было отредактировано: 20 ноя 13, 15:40
20 ноя 13, 15:39    [15162601]     Ответить | Цитировать Сообщить модератору
 Re: Динамический SQL запрос - ошибка  [new]
Alex-ZZZ
Member

Откуда:
Сообщений: 179
Если использовать ##t1 то все работает - есть ли какие нибудь недостатки?
От динамического запроса ни как не избавится, пользователи выбирают список и каждый раз разный.
20 ноя 13, 15:46    [15162680]     Ответить | Цитировать Сообщить модератору
 Re: Динамический SQL запрос - ошибка  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alex-ZZZ
Если использовать ##t1 то все работает - есть ли какие нибудь недостатки?

То, что ##t1 видна все коннектам для вас недостаток ?

Alex-ZZZ
От динамического запроса ни как не избавится, пользователи выбирают список и каждый раз разный.

Т.е. все задачи, где пользователь что-то выбирает, по-вашему решаются только через динамический запрос ?
20 ноя 13, 15:48    [15162713]     Ответить | Цитировать Сообщить модератору
 Re: Динамический SQL запрос - ошибка  [new]
o-o
Guest
Alex-ZZZ,

вот интересно, а какие недостатки у подхода "Создавать таблицу _предварительно_"?
а ##t будет "одна на всех", в отличие от #t, видимой только в создавшей ее сессии.
чтобы почувствовать разницу, выполните свой же код с ##t в соседнем окне
20 ноя 13, 15:50    [15162747]     Ответить | Цитировать Сообщить модератору
 Re: Динамический SQL запрос - ошибка  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Alex-ZZZ
Если использовать ##t1 то все работает - есть ли какие нибудь недостатки?

Вариант не подходит для многопользовательской работы. Больше никаких недостатков

Alex-ZZZ
От динамического запроса ни как не избавится, пользователи выбирают список и каждый раз разный.

Если версия >= 2008, то передавайте @spisok_id в виде табличного параметра и джойните этот параметр с таблицей ttns.
Если версия не позволяет, то парсите @spisok_id во временную таблицу (или табличную переменную) и опять же джойните эту таблицу с таблицей ttns.
20 ноя 13, 15:51    [15162754]     Ответить | Цитировать Сообщить модератору
 Re: Динамический SQL запрос - ошибка  [new]
Alex-ZZZ
Member

Откуда:
Сообщений: 179
Всем спасибо за помощь, буду думать.
20 ноя 13, 15:56    [15162803]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить