вторник, 24 февраля 2009 г.

Составные скрипты для SQL через OLE DB

Создаю запрос к MS SQL через OLE DB. Обчитался учебника по подготовке к MCITP:DBA и чувствую себя могучим. Отправляю сиквелу скрипт типа:

if (select count(*) from tb_softlist where softname='windows' and softversion='xp' and vendor='microsoft')=0
begin;
insert into tb_softlist(softname,softversion,vendor) values('windows','xp','microsoft');
select scope_identity() as SoftID;
end;
else
select SoftID from tb_softlist where softname='windows' and softversion='xp' and vendor='microsoft';

При этом условие вроде выполняется правильно, выделенные жирным части скрипта отрабатываются, а невыделенные - нет. Ломал голову.
Оказалось, все просто:

Access/JET does not support scripts (more than one statement at a time). SQL
Server does.
You'll need to execute another (separate) query to get the @@Identity.

Вот так. Сиквел поддерживает выполнение составных скриптов, а Access/JET - нет. Хоть выполнение условий поддерживает, и то хорошо.

Источник: http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.adonet/2004-07/1599.html