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

Откуда: Краснодар
Сообщений: 76
Добрый день!

Необходимо перенести запрос из mysql на sql сервер 2008.
Для mysql удавалось выполнять промежуточные расчеты построчно примерно так:

SELECT

@oost := COALESCE([Кол-во начало],0),
@reserv := COALESCE([Резерв].[Кол-во в резерве],0) AS [Кол-во в резерве],
@svobodno := @oost - @reserv AS [СвободноДляЗаказа]

FROM ...

При попытке выполнить запрос на 2008 sql server ругается на синтаксис ":" и вообще на присвоение поля переменной.

Спасибо.
23 июл 13, 17:18    [14605652]     Ответить | Цитировать Сообщить модератору
 Re: Промежуточные вычисления  [new]
SilverSpyder
Member

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

Почитайте не ленитесь
23 июл 13, 17:25    [14605699]     Ответить | Цитировать Сообщить модератору
 Re: Промежуточные вычисления  [new]
Гость333
Member

Откуда:
Сообщений: 3683
mqn
При попытке выполнить запрос на 2008 sql server ругается на синтаксис ":"

Потому что присваивание значения переменной в MSSQL — это =, а не :=

mqn
и вообще на присвоение поля переменной.

Тут вы не правы.
23 июл 13, 17:25    [14605702]     Ответить | Цитировать Сообщить модератору
 Re: Промежуточные вычисления  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
mqn
Для mysql удавалось выполнять промежуточные расчеты построчно примерно так:

SELECT
@oost := COALESCE([Кол-во начало],0),
@reserv := COALESCE([Резерв].[Кол-во в резерве],0) AS [Кол-во в резерве],
@svobodno := @oost - @reserv AS [СвободноДляЗаказа]
FROM ...
SELECT ...,
   mysql.oost AS [Кол-во начало], 
   mysql.reserv AS [Кол-во в резерве],
   mysql.oost - mysql.reserv AS [СвободноДляЗаказа]
FROM ...
CROSS APPLY(SELECT
   oost = COALESCE([Кол-во начало],0),
   reserv = COALESCE([Резерв].[Кол-во в резерве],0),
   ) mysql
23 июл 13, 17:25    [14605707]     Ответить | Цитировать Сообщить модератору
 Re: Промежуточные вычисления  [new]
mqn
Member

Откуда: Краснодар
Сообщений: 76
Гость333
Тут вы не правы.


Попробую привести более конкретный код:

CREATE FUNCTION ostatki_po_skladu (@type int, @store int)
RETURNS TABLE
AS
BEGIN
DECLARE @oost int
RETURN
(
SELECT @oost = COALESCE([Кол-во начало], 0)
...

Ошибка: Не правильный синтаксис около конструкции =


Сейчас перечитаю спавку. CROSS APPLY тоже изучу. Спасибо.
23 июл 13, 17:46    [14605885]     Ответить | Цитировать Сообщить модератору
 Re: Промежуточные вычисления  [new]
Гость333
Member

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

Да, по CREATE FUNCTION вам надо прочитать справку. Есть три вида SQL-функций с разным синтаксисом: скалярные, inline и multistatement table-valued. У вас смешан различный синтаксис.
23 июл 13, 17:53    [14605932]     Ответить | Цитировать Сообщить модератору
 Re: Промежуточные вычисления  [new]
mqn
Member

Откуда: Краснодар
Сообщений: 76
В принципе разобрался.
Так же возникли проблемы в следующем:

@svobodno = @oost - @reserv, работает
@oost - @reserv AS СвободноДляЗаказа, тоже не ругается.

Но
@svobodno = @oost - @reserv AS СвободноДляЗаказа, неправильный синтаксис около ключевого слова AS

Подскажите пожалуйста, как видоизменить?
24 июл 13, 10:12    [14608551]     Ответить | Цитировать Сообщить модератору
 Re: Промежуточные вычисления  [new]
mqn
Member

Откуда: Краснодар
Сообщений: 76
Разобрался. Всем спасибо.
24 июл 13, 10:42    [14608793]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить