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

Откуда:
Сообщений: 25
У меня есть следующая задача:
Имеются две таблицы.
В первой таблице хранятся даты начала и конца.
Вторая таблица - график платежей. Он состоит из полей дата и платеж. Платежи должны проходить через каждый месяц, пока не наступит дата окончания.

Пример: в первой таблице у меня хранятся даты начала 22.09.2015 и окончания 25.11.2015
соответственно в таблице график платежей должны быть отражены следующие строки
22.09.2015 ...
22.10.2015 ...
22.11.2015 ...
25.11.2015 ...

Я написал скрипт, но он к сожалению не работает. Нужна Ваша помощь.

DECLARE @tmpDate date = SELECT <StartDate> FROM <qdfOrders>;
DECLARE @tmpEndDate date = SELECT <EndDate> FROM <qdfOrders>;

@tmpDate = DATEADD(month, 1, @tmpDate);

WHILE @tmpDate < @tmpEndDate
BEGIN
INSERT INTO qdfPaymentSchedule (NextPaymentDate, OrderID) VALUES (@tmpDate, <qdfOrders>.<ID>);
@tmpDate = DATEADD(month, 1, @tmpDate);
END
INSERT INTO qdfPaymentSchedule (NextPaymentDate, OrderID) VALUES (@tmpDate, <qdfOrders>.<ID>);
@tmpDate = DATEADD(month, 1, @tmpDate);

треугольные скобки - в моей среде разработки обозначают выбранный элемент (Таблица, Поле..)
22 сен 15, 13:24    [18180132]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
shemik7
Я написал скрипт, но он к сожалению не работает.

"Не работает" - это сообщение об ошибке ?
22 сен 15, 13:28    [18180155]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
Владислав Колосов
Member

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

наверняка скрипт работает и что-то при этом происходит. А что за синтаксис такой с угловыми скобками? Это какой язык?
22 сен 15, 13:34    [18180191]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4260
Навскидку
@tmpDate = DATEADD(month, 1, @tmpDate);


должно быть

SELECT @tmpDate = DATEADD(month, 1, @tmpDate);
22 сен 15, 13:34    [18180193]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
shemik7
Member

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

Система, в которой я работаю просто не пропускает запрос, если он неправильный и длинный.
А вообще, выдал при более коротком запросе "Отсутствует значение поля @tmpDate"
22 сен 15, 13:35    [18180198]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4260
Такая конструкция работает не на всех версиях SQL Server
DECLARE @tmpDate date = SELECT <StartDate> FROM <qdfOrders>;


Надеюсь угловые скобки лишь для наглядности?
22 сен 15, 13:36    [18180209]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
shemik7
Система, в которой я работаю просто не пропускает запрос, если он неправильный и длинный.

Вы хотите, чтобы вам подобрали другую систему ?

shemik7
А вообще, выдал при более коротком запросе "Отсутствует значение поля @tmpDate"

Это не серверное сообщение.
22 сен 15, 13:36    [18180210]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
Владислав Колосов
Member

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

то, что Вы написали, не имеет отношения к синтаксису T-SQL.
22 сен 15, 13:36    [18180211]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
shemik7
Member

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

Я не хочу, чтобы мне подобрали другую среду, я хочу найти ошибку в коде.
Угловые скобки можно убрать.
22 сен 15, 13:40    [18180230]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4260
Это значение откуда берется?
 <qdfOrders>.<ID> 

Если из таблицы, то должно быть
... FROM <qdfOrders>
22 сен 15, 13:41    [18180239]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
shemik7
Member

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

Какие есть варианты?
22 сен 15, 13:42    [18180243]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4260
shemik7
я хочу найти ошибку в коде.

Тогда приведите полный текст этой ошибки!
Гадать мы можем до вечера....
22 сен 15, 13:42    [18180245]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
shemik7
Member

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

Это синтаксис для указания текущего выбранного поля, к которому применяется данный запрос
22 сен 15, 13:43    [18180251]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
shemik7
Я не хочу, чтобы мне подобрали другую среду, я хочу найти ошибку в коде.

Тогда вам нужно привести _серверное_ сообщение об ошибке
22 сен 15, 13:47    [18180278]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
shemik7
Это синтаксис для указания текущего выбранного поля, к которому применяется данный запрос

Какое отношение он имеет к MSSQL ?
22 сен 15, 13:47    [18180283]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4260
shemik7
SQL2008,

Это синтаксис для указания текущего выбранного поля, к которому применяется данный запрос

поле выбрано где?
22 сен 15, 13:47    [18180284]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4260
shemik7
У меня есть следующая задача:
Имеются две таблицы.
В первой таблице хранятся даты начала и конца.
Вторая таблица - график платежей. Он состоит из полей дата и платеж. Платежи должны проходить через каждый месяц, пока не наступит дата окончания.

Пример: в первой таблице у меня хранятся даты начала 22.09.2015 и окончания 25.11.2015
соответственно в таблице график платежей должны быть отражены следующие строки
22.09.2015 ...
22.10.2015 ...
22.11.2015 ...
25.11.2015 ...

Я написал скрипт, но он к сожалению не работает. Нужна Ваша помощь.

DECLARE @tmpDate date = SELECT <StartDate> FROM <qdfOrders>;
DECLARE @tmpEndDate date = SELECT <EndDate> FROM <qdfOrders>;

@tmpDate = DATEADD(month, 1, @tmpDate);

WHILE @tmpDate < @tmpEndDate
BEGIN
INSERT INTO qdfPaymentSchedule (NextPaymentDate, OrderID) VALUES (@tmpDate, <qdfOrders>.<ID>);
@tmpDate = DATEADD(month, 1, @tmpDate);
END
INSERT INTO qdfPaymentSchedule (NextPaymentDate, OrderID) VALUES (@tmpDate, <qdfOrders>.<ID>);
@tmpDate = DATEADD(month, 1, @tmpDate);

треугольные скобки - в моей среде разработки обозначают выбранный элемент (Таблица, Поле..)


Алгоритм неверный!
1. После окончания срока в таблицу будет добавлена дата 22.12.2015, а не 25.11.2015 как хотелось.
2. А если в таблице qdfOrders несколько записей с разными датами... Какая дата будет при SELECT <StartDate> FROM <qdfOrders>?
3. Что будет есть в конце даты сравняются - @tmpDate и @tmpEndDate? Срок выплаты кончится, а дата в график платежей через месяц добавится.
22 сен 15, 13:55    [18180348]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
zero_air
Member

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

а какую дату вы бы хотели получить, если бы "вдруг" это заработало ?

DECLARE @tmpDate date = SELECT <StartDate> FROM <qdfOrders>;
DECLARE @tmpEndDate date = SELECT <EndDate> FROM <qdfOrders>;
22 сен 15, 13:56    [18180366]     Ответить | Цитировать Сообщить модератору
 Re: Не работает SQL запрос  [new]
в первой таблице у меня
Guest
shemik7,

всем присвоениям вне declaer нужен SET
в declare нужны скобки вокруг селектов
22 сен 15, 14:15    [18180518]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить