Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Нумерация всяких бумажек. / 6 сообщений из 6, страница 1 из 1
29.11.2004, 20:40:57
    #32804812
Дмитрий15
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация всяких бумажек.
Подскажите SQL инструкцию для генерации номеров всяких бумажек. Пока дошел до процедуры такого вида
можно ли результат такой процедуру использовать в
качестве значения в операторе виде INSERT INTO VALUES ()
или надо переделать на возвращение единственного значения и сделать
функцию?



Я сделал так: оно работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ALTER PROCEDURE SYS_NEXT_NUMBER
        @NAME VARCHAR( 32 ),
        @ResultValue int OUTPUT
AS
begin
  if (exists(select  1  from SeqNumbers where Name=@Name))
      begin
         update SeqNumbers set LastValue=LastValue+ 1  where Name=@Name;
         SET @ResultValue = (select LastValue from SeqNumbers where
Name=@Name)
      end
  else
      begin
         SET @ResultValue =  1 ;
         insert into SeqNumbers (Name,LastValue) values (@Name,
@ResultValue);
      end
end
Но как это использовать в инструкции вида
Код: plaintext
INSERT INTO .. VALUES ()
Или подскажите как это оформить в виде функциию Сделал вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
ALTER FUNCTION dbo.GET_SYS_NEXT_NUMBER
	(@NAME NVARCHAR( 32 ))
RETURNS int
AS
begin
  declare @ResultValue int
  EXEC SYS_NEXT_NUMBER @NAME, @ResultValue output
  return @ResultValue
end
Оно ругается на то что так вызывать нельзя...????


Origin: Женщины и виски размягчают мозг.
...
Рейтинг: 0 / 0
29.11.2004, 22:04:23
    #32804848
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация всяких бумажек.
С домашней машины наизусть не напишу, а взрослый sql на работе. В Query Analyzer есть готовый шаблон для таких функций - возвращающих скалярное значение. Их удобно использовать в того рода запросах.
...
Рейтинг: 0 / 0
30.11.2004, 08:46:34
    #32805031
Раз (1)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация всяких бумажек.
А ничего что в процедуре параметр типа varchar, а в функции - nvarchar?
Больше вроде ничего подозрительного не видно )
...
Рейтинг: 0 / 0
30.11.2004, 08:51:56
    #32805036
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация всяких бумажек.
Как обещал с рабочей машины пример функций, вызываемых в запросах.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
CREATE FUNCTION CalcDaysYearBasis(@iDaysCode INT) 
RETURNS INT
AS BEGIN

    RETURN CAST (
        CASE @iDaysCode
            WHEN  1  THEN  365 
            WHEN  2  THEN  360 
            WHEN  3  THEN  360 
            ELSE NULL 
        END 
    AS INT)

END

CREATE FUNCTION CalcDaysNumber(
    @dtFrom DATETIME, @dtTo DATETIME, @iDaysCode INT) 
RETURNS INT
AS BEGIN

    RETURN CAST(
        CASE 
            WHEN (@dtTo Is NULL) OR (@dtFrom Is NULL) THEN NULL
            WHEN @iDaysCode= 1  THEN CAST(@dtTo as INT) - CAST(@dtFrom as INT)
            WHEN @iDaysCode= 2  THEN CAST(@dtTo as INT) - CAST(@dtFrom as INT)
            WHEN @iDaysCode= 3  THEN CASE 
                WHEN  30  - DAY(@dtFrom)> 0  
                THEN  30  - DAY(@dtFrom)
                ELSE  0  
            END 
            - CASE 
                WHEN  30  - DAY(@dtTo) >  0 
                THEN  30  - DAY(@dtTo) 
                ELSE  0 
            END
            +  30  * (MONTH(@dtTo)-MONTH(@dtFrom))
            +  360  * (YEAR(@dtTo)-YEAR(@dtFrom))
        END 
    AS INT)

END

CREATE FUNCTION CalcInterest(
    @dbAmount MONEY, @dbInterestRate DECIMAL( 12 , 8 ), 
    @dtFrom DATETIME, @dtTo datetime, @iDaysCode int) 
RETURNS MONEY
AS BEGIN

RETURN 
    CAST ( 
        ROUND (
            (@dbAmount*@dbInterestRate/ 100 )
            * dbo.CalcDaysNumber(@dtFrom, @dtTo, @iDaysCode) 
            / dbo.CalcDaysYearBasis(@iDaysCode), 
             2 
        ) AS MONEY
    )

END
...
Рейтинг: 0 / 0
30.11.2004, 08:53:16
    #32805038
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация всяких бумажек.
Подобные вопросы не раз обсуждались на форумах по MS Access и SQL Server.
Советую поискать. Есть очень даже оригинальные решения!
...
Рейтинг: 0 / 0
30.11.2004, 09:03:37
    #32805049
Дмитрий16
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерация всяких бумажек.
Rivkin DmitryПодобные вопросы не раз обсуждались на форумах по MS Access и SQL Server.
Советую поискать. Есть очень даже оригинальные решения!

ГРАБЛИ! В том что в функциях не получается использовать INSERT и UPDATE... Как обойти???
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Нумерация всяких бумажек. / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]