Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как сделать такую процедуру?  [new]
Rovshan_1975
Member

Откуда:
Сообщений: 26
CREATE PROCEDURE DEL_CASH_TRAN
@LN CHAR(25), @DATE DATETIME, @ACNO CHAR (15)

AS
UPDATE ACCOUNTS
SET Balance= Balance - (SELECT PAIDTOTALAMOUNT FROM LoanPayments
WHERE Transaction_Ref = @LN AND TrDate=@DATE )
WHERE ACNO=@ACNO
GO


Как обьявить переменные в SELECT-е?
18 сен 13, 15:53    [14855246]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Гость333
Member

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

Какие переменные? @LN, @DATE, @ACNO — это параметры процедуры. На первый взгляд у вас всё синтаксически правильно. Какая-то ошибка выдаётся?
18 сен 13, 15:56    [14855280]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Rovshan_1975
Member

Откуда:
Сообщений: 26
значение которую хочу обновить выдает NULL. В данном случае Balance...
18 сен 13, 15:58    [14855303]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Гость333
Rovshan_1975,

Какие переменные? @LN, @DATE, @ACNO — это параметры процедуры. На первый взгляд у вас всё синтаксически правильно. Какая-то ошибка выдаётся?
Правильно (по крайней мере логически) -
это если подзапрос возвращает одну строку.
Но мы не знаем структуру таблиц и связи между ними.
18 сен 13, 16:01    [14855323]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Rovshan_1975
значение которую хочу обновить выдает NULL. В данном случае Balance...
Что же мешает преобразовать NULL в 0 функцией ISNULL()?
18 сен 13, 16:02    [14855326]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
iap
Правильно (по крайней мере логически)

Вопрос был — "Как обьявить переменные в SELECT-е?", т.е. выглядел как вопрос по синтаксису :-)
18 сен 13, 16:04    [14855347]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Rovshan_1975
значение которую хочу обновить выдает NULL. В данном случае Balance...
Аггрегировать в SUM(PAIDTOTALAMOUNT)

Тогда результат всегда будет: а) одна строка, б) не NULL
18 сен 13, 16:08    [14855385]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Cygapb-007
Аггрегировать в SUM(PAIDTOTALAMOUNT)
Тогда результат всегда будет: ... не NULL


Да ну?!
18 сен 13, 16:11    [14855406]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
pkarklin
Cygapb-007
Аггрегировать в SUM(PAIDTOTALAMOUNT)
Тогда результат всегда будет: ... не NULL


Да ну?!
Хмм.. фигню спорол...

Не ожидал...
18 сен 13, 16:13    [14855426]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Rovshan_1975
Member

Откуда:
Сообщений: 26
Это понятно а как сделать так чтобы входные данные процедуры повлияли на Select?
18 сен 13, 16:14    [14855438]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Rovshan_1975
Это понятно а как сделать так чтобы входные данные процедуры повлияли на Select?

Они и так влияют
18 сен 13, 16:16    [14855463]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Гость333
Member

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

Они и так влияют.
Чему равен результат выполнения запроса?
SELECT PAIDTOTALAMOUNT FROM LoanPayments
WHERE Transaction_Ref = @LN AND TrDate=@DATE 
18 сен 13, 16:17    [14855466]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Rovshan_1975
Member

Откуда:
Сообщений: 26
Не влияют.
18 сен 13, 16:17    [14855473]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Rovshan_1975
Member

Откуда:
Сообщений: 26
Null
18 сен 13, 16:18    [14855480]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Rovshan_1975
Не влияют.

Если они влияют не так, как вам нужно, то перепишите запрос. А не делайте голословных заявлений
18 сен 13, 16:19    [14855489]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Rovshan_1975
Member

Откуда:
Сообщений: 26
С входных параметров Процедуры они почему то выдает NULL. А если сделать так то получаеться:

SELECT Balance = Balance -(SELECT PAIDTOTALAMOUNT FROM LoanPayments
WHERE Transaction_Ref='LITLN999-0166329-171020131' AND TrDate='2013-10-17')
FROM ACCOUNTS
WHERE ACNO='3363447000'
18 сен 13, 16:24    [14855537]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Rovshan_1975
С входных параметров Процедуры они почему то выдает NULL.

Они выдают то, что вы передали в процедуру
18 сен 13, 16:25    [14855553]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Rovshan_1975
Member

Откуда:
Сообщений: 26
EXEC DEL_CASH_TRAN 'LITLN999-0166329-171020131','2013-10-17','3363447000'

Входные параметры в результате прописывает в Balance значение NULL.
18 сен 13, 16:27    [14855589]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Rovshan_1975
Member

Откуда:
Сообщений: 26
А в selecte выдает значение 595
18 сен 13, 16:29    [14855604]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Rovshan_1975
EXEC DEL_CASH_TRAN 'LITLN999-0166329-171020131','2013-10-17','3363447000'

Входные параметры в результате прописывает в Balance значение NULL.

Послушайте. Почему вы используете форум в качестве дебаггера или отладочных выводов своего кода ?
18 сен 13, 16:30    [14855613]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Rovshan_1975
Member

Откуда:
Сообщений: 26
Я не пытаюсь обидеть Вас. Просто реально нужна помощь в этом вопросе.
18 сен 13, 16:33    [14855629]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Rovshan_1975
Я не пытаюсь обидеть Вас. Просто реально нужна помощь в этом вопросе.

В каком ? Как мне узнать, что я передал в процедуру ?
18 сен 13, 16:39    [14855669]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Rovshan_1975
Member

Откуда:
Сообщений: 26
Вот процедура

CREATE PROCEDURE DEL_CASH_TRAN
@LN CHAR(25), @DATE DATETIME, @ACNO CHAR (15)

AS
UPDATE ACCOUNTS
SET Balance= Balance - (SELECT PAIDTOTALAMOUNT FROM LoanPayments
WHERE Transaction_Ref = @LN AND TrDate=@DATE )
WHERE ACNO=@ACNO
GO

Передаю параметры на update.

EXEC DEL_CASH_TRAN 'LITLN999-0166329-171020131' , '2013-10-17' , '3363447000'

Результат в таблице после exec выдает NULL.. Каким макаром можно сделать так чтобы эти параметры повлияли на select в данной процедуре?
18 сен 13, 16:44    [14855701]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Rovshan_1975
Передаю параметры на update.

А какие значения получают переиенные _внутри_ процедуру слабо проверить ?
18 сен 13, 16:46    [14855712]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать такую процедуру?  [new]
Rovshan_1975
Member

Откуда:
Сообщений: 26
Слабо
18 сен 13, 16:48    [14855727]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить