![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что дает ;SET NOCOUNT ON? [D7, MSSQL]
Bless © (2003-07-08 09:51:00)Сабж.
И еще вопрос.
Есть таблица Tab1 с полями
kod
name
parent - имя родителя
Как найти всех потомков (MSSQL 7.0) для записи с кодом, например, 1? А именно, как сделать то, что выделено в примере ниже, чтобы организовать цикл
declare @x int
set @x=1
create table #MyTable(
kod int,
name varchar(20),
parent int
)
insert into #MyTable
select * from tab1
where parent=@x
!!!!!!! @x=kod !!!!!!!!!
while @@rowcount>0
begin
insert into #MyTable
select kod, name, parent from tab1
where parent=@x
!!!!!!! @x=kod !!!!!!!!!
end
Bless (2003-07-08 17:39:00) [1]Спасибо.
На второй вопрос уже можно не отвечать.
Но есть еще один вопросик:
в Profiler-е какой тип данных позволяет судить об эффективности запроса CPU или Duration? А то по смыслу вроде бы оба, но иногда
у одного batch-а CPU больше, а Duration меньше, чем у другого.
И непонятно, по чему судить об эффективности
sniknik (2003-07-08 12:29:00) [2]пример (результат получен с разбором всего возврацающегося от команды)
команда
INSERT INTO authors2 (COL2) VALUES ( 1)
SELECT * FROM authors2
Выполнено применительно к 1 записям. (no recordset) //от первой команды
применительно к 1 записям //от второй
то же самое с дополнением
SET NOCOUNT ON
INSERT INTO authors2 (COL2) VALUES ( 1)
SELECT * FROM authors2
Выполнено применительно к 2 записям //только от второй
вот в этой разнице и есть смысл.
jocko (2003-07-08 12:10:00) [3]перевел правильно, но не правильно понял.
чтобы было проще- нипиши Хран. проц. в ней сначала insert а следом raiserror и вот эту опцию перед всем приделай, из клиента запусти (ado) и смотри что будет если опцию отключить и включить, а затем ту же проц запусти в Query Analizer, и тоже сравни...
Bless (2003-07-08 11:54:00) [4]>stone © (08.07.03 10:19)
>1. А в справку заглянуть ломает?
Не ломает. Просто сложности с переводом
Stops the message indicating the number of rows affected by a Transact-SQL statement from being returned as part of the results.
Как я понял, это означает, что отключается нумерация строк, возвращаемых SQL-запросом.
Я думал, что после SET NOCOUNT ON
перестанет работать @@rowcount. Но он работает.
Поэтому я наверное неправильно перевел. Потому и спрашиваю.
>2. while exists (select kod from tab1 where kod in (select >parent from #MyTable where kod <> tab1.kod))
Так я тоже могу. Но нельзя ли это сделать в цикле.
Просто этот вариант мне не очень нравится тем, что сначала
ищутся записи select-ом внутри Exists
while exists (select <записи>), а потом эти самые записи вставляются в таблицу
insert ... select <те же самые записи>
Получается, тут дважды выбираются одни и те же данные,
что не есть хорошо.
stone (2003-07-08 10:22:00) [5]sorry
2. while exists (select kod from tab1 where kod in (select parent from #MyTable where kod <> tab1.kod))
stone (2003-07-08 10:19:00) [6]1. А в справку заглянуть ломает?
SET NOCOUNT
Stops the message indicating the number of rows affected by a Transact-SQL statement from being returned as part of the results.
2. while exists (select kod from tab1 where kod in (select parent from #MyTable))
insert ... ну и т.д.
stone (2003-07-08 10:19:00) [7]только при инсерте вставлять только записи отсутствующие в #MyTable