Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.31;
Скачать: CL | DM;

Вниз

Что дает 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.095 c
14-100975
Ower
2003-07-15 21:23
2003.07.31
Random


14-100872
easy
2003-07-13 01:21
2003.07.31
mirror


4-101027
Шишкин Илья
2003-05-28 16:42
2003.07.31
Как лучше закрыть чужое приложение?


14-100982
Князь Мышкин
2003-07-15 11:46
2003.07.31
Какой смысл в женщинах?


3-100611
DBDev
2003-07-09 15:11
2003.07.31
Проблема с TDBImage! Подскажите ПЛИЗ!!!