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

Откуда:
Сообщений: 2695
Доброго дня господа !

Подскажите пожалуйста почему не работает ?
create table DBO.ListRate(ID   Int not null,
                      RATE Int,    
                      constraint ID primary key(ID)
                     );
insert into ListRate values(326,1);


MERGE DBO.ListRate as T
USING (SELECT 234 as ID,3 as RATE) as S(ID,RATE)
ON(T.ID=S.ID)
WHEN     MATCHED THEN UPDATE SET T.RATE=S.RATE
WHEN NOT MATCHED THEN INSERT(T.ID,T.RATE) VALUES(S.ID,S.RATE)


Сообщение 102, уровень 15, состояние 1, строка 1
Incorrect syntax near '.'.
Сообщение 156, уровень 15, состояние 1, строка 2
Incorrect syntax near the keyword 'as'.
8 дек 11, 15:36    [11730233]     Ответить | Цитировать Сообщить модератору
 Re: Использование MERGE  [new]
HOME_X
Member

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

В которой версии эта команда вообще появилась ?
В MS 2005 была ?
8 дек 11, 15:39    [11730264]     Ответить | Цитировать Сообщить модератору
 Re: Использование MERGE  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Версию сервера вашего приведите.
8 дек 11, 15:39    [11730265]     Ответить | Цитировать Сообщить модератору
 Re: Использование MERGE  [new]
Гавриленко Сергей Алексеевич
Member

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

В которой версии эта команда вообще появилась ?
В MS 2005 была ?
В 2008м появился.
8 дек 11, 15:40    [11730271]     Ответить | Цитировать Сообщить модератору
 Re: Использование MERGE  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
HOME_X
Доброго дня господа !

Подскажите пожалуйста почему не работает ?
create table DBO.ListRate(ID   Int not null,
                      RATE Int,    
                      constraint ID primary key(ID)
                     );
insert into ListRate values(326,1);


MERGE DBO.ListRate as T
USING (SELECT 234 as ID,3 as RATE) as S(ID,RATE)
ON(T.ID=S.ID)
WHEN     MATCHED THEN UPDATE SET T.RATE=S.RATE
WHEN NOT MATCHED THEN INSERT(T.ID,T.RATE) VALUES(S.ID,S.RATE)


Сообщение 102, уровень 15, состояние 1, строка 1
Incorrect syntax near '.'.
Сообщение 156, уровень 15, состояние 1, строка 2
Incorrect syntax near the keyword 'as'.
Всё работает.
MERGE dbo.ListRate T
USING (SELECT 234,3) S(ID,RATE) ON T.ID=S.ID
WHEN     MATCHED THEN UPDATE SET T.RATE=S.RATE
WHEN NOT MATCHED THEN INSERT(ID,RATE) VALUES(S.ID,S.RATE);
8 дек 11, 15:43    [11730322]     Ответить | Цитировать Сообщить модератору
 Re: Использование MERGE  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
Гавриленко Сергей Алексеевич,

Версия 2005
8 дек 11, 16:33    [11730737]     Ответить | Цитировать Сообщить модератору
 Re: Использование MERGE  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
HOME_X
Гавриленко Сергей Алексеевич,

Версия 2005


11730271
8 дек 11, 17:09    [11731082]     Ответить | Цитировать Сообщить модератору
 Re: Использование MERGE  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
Knyazev Alexey
HOME_X
Гавриленко Сергей Алексеевич,

Версия 2005


11730271


Спасибо ..
Я понял что работать не будет из за версии .
8 дек 11, 17:15    [11731157]     Ответить | Цитировать Сообщить модератору
 Re: Использование MERGE  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
HOME_X
Knyazev Alexey
пропущено...


11730271


Спасибо ..
Я понял что работать не будет из за версии .


вы можете заменить на
if exists ()
update ...
else 
insert  ...
8 дек 11, 17:17    [11731174]     Ответить | Цитировать Сообщить модератору
 Re: Использование MERGE  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
Knyazev Alexey
HOME_X
пропущено...


Спасибо ..
Я понял что работать не будет из за версии .


вы можете заменить на
if exists ()
update ...
else 
insert  ...


Принято !!

У меня там ASPX работате
<asp:SqlDataSource
ID="dsRate"
Runat="Server"
SelectCommand="..........ЗДЕСЬ SQL................."
ProviderName="System.Data.OleDb"
ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\ievv00600045\MAIL\main.mdb">
</asp:SqlDataSource>

Как она примет эту команду - пока не знаю - сейчас буду пробывать ...
if exists(select 1 from DBO.ListRate where ID=500) update DBO.ListRate set RATE=300 where ID=500 else insert DBO.ListRate values(500,560)
8 дек 11, 17:31    [11731362]     Ответить | Цитировать Сообщить модератору
 Re: Использование MERGE  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
HOME_X
сейчас буду пробывать ...
if exists(select 1 from DBO.ListRate where ID=500) update DBO.ListRate set RATE=300 where ID=500 else insert DBO.ListRate values(500,560)


если вы не единственный писатель, то не забывайте лочить при проверке наличия значения в таблице...а то можете нарваться на дубли
8 дек 11, 17:40    [11731468]     Ответить | Цитировать Сообщить модератору
 Re: Использование MERGE  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Knyazev Alexey
HOME_X
сейчас буду пробывать ...
if exists(select 1 from DBO.ListRate where ID=500) update DBO.ListRate set RATE=300 where ID=500 else insert DBO.ListRate values(500,560)


если вы не единственный писатель, то не забывайте лочить при проверке наличия значения в таблице...а то можете нарваться на дубли
Для MERGE это тоже было бы справедливо
8 дек 11, 17:51    [11731604]     Ответить | Цитировать Сообщить модератору
 Re: Использование MERGE  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
iap
Knyazev Alexey
пропущено...


если вы не единственный писатель, то не забывайте лочить при проверке наличия значения в таблице...а то можете нарваться на дубли
Для MERGE это тоже было бы справедливо


Принято !
Спасибо господа !
8 дек 11, 19:42    [11732327]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить