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

Откуда: Челябинск
Сообщений: 1873
Имеется 2 sql запроса, тексты которых лежат в переменных @sql1 и @sql2.
Запросы возвращают разные имена полей.
Но сравнивать надо 1-е из @sql1 с 1м из @sql2, второе со вторым и т.д.
Порядок строк в запросах ожидается одинаковым.
Равны ли результаты?
Главное - как то извлечь рез-ты из @sql1,@sql2
Делаю попытку:

declare @sql1 varchar(2000)
set @sql1='select * from Depart'
declare @s1 varchar(2000)
set @s1='select * into #t1 from ('+@sql1+') t'
select @s1 -- получается "select * into #t1 from (select * from Depart) t"
      -- и выполнение этого оператора вполне корректно
exec (@s1)
select * from #t1 -- invalid object name #t1
drop table #t1


Может кто укажет ошибку? Заранее спасибо. (MS SQL SERVER 2005)
12 дек 12, 15:29    [13619898]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить результаты 2х запросов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
create table #t ...
declare @sql1 varchar(2000)
set @sql1='select * from Depart'
declare @s1 varchar(2000)
set @s1='insert into #t select * from ('+@sql1+') t'
select @s1 -- получается "select * into #t1 from (select * from Depart) t"
      -- и выполнение этого оператора вполне корректно
exec (@s1)
select * from #t1 -- invalid object name #t1
drop table #t1
12 дек 12, 15:36    [13619971]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить результаты 2х запросов  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1873
Я думаю, вы ошибаетесь:
books on line:

автор
select ...[ INTO new_table ]
new table - Имя новой таблицы, создаваемой на основе столбцов, указанных в списке выбора, и строк, выбираемых предложением WHERE. Формат аргумента new_table определяется путем расчета выражений, указанных в списке выбора. Столбцы в таблице, указанной в аргументе new_table, создаются в порядке, соответствующем списку выбора. Все столбцы таблицы, указанной в аргументе new_table, получают такие же имена, типы данных и значения, которые указаны в соответствующем выражении в списке выбора.

операторы
select * into #t1 from (select * from Depart) t
select * from #t1
drop table #t1

успешно работают. Никакого create table не требуется
12 дек 12, 15:45    [13620081]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить результаты 2х запросов  [new]
Maxx
Member [скрыт]

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

BOL - читаем про область видимости временых таблиц
12 дек 12, 15:48    [13620116]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить результаты 2х запросов  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
muk07
Я думаю, вы ошибаетесь:
books on line:

автор
select ...[ INTO new_table ]
new table - Имя новой таблицы, создаваемой на основе столбцов, указанных в списке выбора, и строк, выбираемых предложением WHERE. Формат аргумента new_table определяется путем расчета выражений, указанных в списке выбора. Столбцы в таблице, указанной в аргументе new_table, создаются в порядке, соответствующем списку выбора. Все столбцы таблицы, указанной в аргументе new_table, получают такие же имена, типы данных и значения, которые указаны в соответствующем выражении в списке выбора.

операторы
select * into #t1 from (select * from Depart) t
select * from #t1
drop table #t1

успешно работают. Никакого create table не требуется
Временная таблица, созданная внутри динамического SQL, живёт только до конца выполнения этого DSQL.
12 дек 12, 15:49    [13620133]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить результаты 2х запросов  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
muk07,

а вот если таблицу создать ДО DSQL, то использовать её можно будет и после.
12 дек 12, 15:52    [13620154]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить результаты 2х запросов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
muk07
успешно работают.
Ок, я ошибся. Видимо, для вас invalid object name #t1 это успешная работа, умываю руки.
12 дек 12, 15:54    [13620193]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить результаты 2х запросов  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1873
Спасибо, сейчас попробую.
Хотя как - не знаю. Мне неизвестно что написано в запросах sql1,sql2
12 дек 12, 15:54    [13620195]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить результаты 2х запросов  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1873
Да, вы правы, iap, спасибо.
Если таблица не временная, то работает.
declare @sql1 varchar(2000)
set @sql1='select * from Depart'
declare @s1 varchar(2000)
set @s1='select * into tt1 from ('+@sql1+') t'
select @s1 -- получается "select * into tt1 from (select * from Depart) t"
      -- и выполнение этого оператора вполне корректно
exec (@s1)
select * from tt1 
drop table tt1


Сергей Алексеевич, а вы передергиваете.
фраза "успешно работает" в моем тексте относилась ко 2му запросу
а вы делаете вид, что к первому.
Кстати если #t1 уже существует, то select into выдаст ошибку
12 дек 12, 16:12    [13620361]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить результаты 2х запросов  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
muk07
Кстати если #t1 уже существует, то select into выдаст ошибку

внезапно
12 дек 12, 16:46    [13620797]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить результаты 2х запросов  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
muk07
Да, вы правы, iap, спасибо.
Если таблица не временная, то работает.
declare @sql1 varchar(2000)
set @sql1='select * from Depart'
declare @s1 varchar(2000)
set @s1='select * into tt1 from ('+@sql1+') t'
select @s1 -- получается "select * into tt1 from (select * from Depart) t"
      -- и выполнение этого оператора вполне корректно
exec (@s1)
select * from tt1 
drop table tt1


Сергей Алексеевич, а вы передергиваете.
фраза "успешно работает" в моем тексте относилась ко 2му запросу
а вы делаете вид, что к первому.
Кстати если #t1 уже существует, то select into выдаст ошибку


хмм ...
12 дек 12, 17:17    [13621090]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить