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

Откуда:
Сообщений: 2
Доброго времени суток!

Имеется MS SQL Server 2008, обновленный до Service Pack 2 (ver. 10.0.4000). Для того, чтобы вести хронику Update, создается таблица изменяемых запасов StockChange и специальная таблица ChronicleUpdates. Далее создается хранимка uspUpdateStock, которая, используя инструмент INSERT OVER DML, фильтрует только оперцаии UPDATE и вставляет в таблицу с хроникой.

create table StockChange (
  StockId int IDENTITY(1,1) primary key,
  StockName varchar(50) not null,
  Cost decimal)
go
create table ChronicleUpdate (
  StockId int IDENTITY(1,1) primary key,
  StockName varchar (50) not null,
  Cost decimal,
  ArchievedAt datetime2
  )  
go

create procedure uspUpdateStock 
as
begin
	insert into ChronicleUpdate(StockName, Cost, ArchievedAt)
	select  StockName, Cost, SYSDATETIME()
	from
	(
		merge ChronicleUpdate as cu 
		 using StockChange as sc
		  on cu.StockId = sc.StockId
		when matched and (cu.StockName <> sc.StockName or cu.Cost <> sc.Cost) then
		  update set StockName = sc.StockName, Cost = sc.Cost
		when not matched then 
		  insert values (sc.StockName, sc.Cost, NULL)
		output $action, Deleted.StockName, Deleted.Cost
	) as Changes(Action, StockName, Cost)
	where Action = 'UPDATE';
end
go

Процедура не компилируется. Проблема заключается в синтаксисе инструкций: Incorrect syntax near the keyword "as" с подсветкой merge ChronicleUpdates as cu. Рабочие примеры BOL Online на сервере выполняются без проблем, а в этом случае процедура не компилируется.

Подскажите, пожалуйста, в чём может заключаться эта проблема?
31 авг 11, 18:38    [11208522]     Ответить | Цитировать Сообщить модератору
 Re: Insert Over DML и хроника Update  [new]
iljy
Member

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

уровень совместимости базы какой установлен?
1 сен 11, 00:37    [11209726]     Ответить | Цитировать Сообщить модератору
 Re: Insert Over DML и хроника Update  [new]
EdwardK
Member

Откуда:
Сообщений: 2
iljy, спасибо!
Да, дело было именно в уровне совместимости базы. Проблема решается установкой параметра compatibility_level базы с соответствующего SQL Server 2005 (90) на соответствующий SQL Server 2008 (100):
alter database Stocks
set compatibility_level = 100
1 сен 11, 09:38    [11210122]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить