Форум: "Базы";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];
ВнизЧто дает SET NOCOUNT ON? Найти похожие ветки
← →
Bless (2003-07-08 09:51) [0]Сабж.
И еще вопрос.
Есть таблица 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
← →
stone (2003-07-08 10:19) [1]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) [2]только при инсерте вставлять только записи отсутствующие в #MyTable
← →
stone (2003-07-08 10:22) [3]sorry
2. while exists (select kod from tab1 where kod in (select parent from #MyTable where kod <> tab1.kod))
← →
Bless (2003-07-08 11:54) [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 <те же самые записи>
Получается, тут дважды выбираются одни и те же данные,
что не есть хорошо.
← →
jocko (2003-07-08 12:10) [5]перевел правильно, но не правильно понял.
чтобы было проще- нипиши Хран. проц. в ней сначала insert а следом raiserror и вот эту опцию перед всем приделай, из клиента запусти (ado) и смотри что будет если опцию отключить и включить, а затем ту же проц запусти в Query Analizer, и тоже сравни...
← →
sniknik (2003-07-08 12:29) [6]пример (результат получен с разбором всего возврацающегося от команды)
команда
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 записям //только от второй
вот в этой разнице и есть смысл.
← →
Bless (2003-07-08 17:39) [7]Спасибо.
На второй вопрос уже можно не отвечать.
Но есть еще один вопросик:
в Profiler-е какой тип данных позволяет судить об эффективности запроса CPU или Duration? А то по смыслу вроде бы оба, но иногда
у одного batch-а CPU больше, а Duration меньше, чем у другого.
И непонятно, по чему судить об эффективности
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c