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

Откуда:
Сообщений: 1427
Привет, не пойму - в чем ошибка...
есть таблица, где последнее поле вычисляется, а затем по нему [DATA_YEAR] и [NAKL] строится уникальный индекс (просто для контроля целостности)

CREATE TABLE [dbo].[T_NAKL] (
[N_NAKL] [int] IDENTITY (1, 1) NOT NULL ,
[NAKL] [int] NOT NULL ,
[DATA] [datetime] NOT NULL ,
[N_POST_GRUZOOTPR] [int] NOT NULL ,
[N_POKUP_PLAT_GRUZPOLUCH] [int] NOT NULL ,
[N_MANAGER] [int] NOT NULL ,
[DATA_YEAR] AS (convert(varchar(4),[DATA],112))
) ON [PRIMARY]
GO
CREATE INDEX [FK_NAKL_MANAGER] ON [dbo].[T_NAKL]([N_MANAGER]) WITH FILLFACTOR = 90 ON [PRIMARY]
GO
CREATE INDEX [FK_NAKL_POST_GRUZOOTPR] ON [dbo].[T_NAKL]([N_POST_GRUZOOTPR]) WITH FILLFACTOR = 90 ON [PRIMARY]
GO
CREATE INDEX [FK_POKUP_PLAT_GRUZPOLUCH] ON [dbo].[T_NAKL]([N_POKUP_PLAT_GRUZPOLUCH]) WITH FILLFACTOR = 90 ON [PRIMARY]
GO
set ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS on
GO
set NUMERIC_ROUNDABORT off
GO
CREATE UNIQUE INDEX [UNQ_T_NAKL] ON [dbo].[T_NAKL]([NAKL], [DATA_YEAR]) ON [PRIMARY]
GO
set arithabort OFF
GO
set numeric_roundabort OFF
GO
set quoted_identifier OFF
GO

Есть процедура, с помощью которой вставляю новые значения:

CREATE PROCEDURE DBO.T_NAKL_INS
(
@N_POST_GRUZOOTPR INTEGER,
@N_POKUP_PLAT_GRUZPOLUCH INTEGER,
@N_MANAGER INTEGER
)
AS
DECLARE @i INTEGER
Select @i = (select MAX(NAKL) from T_NAKL where DATEPART(YEAR,DATA)=DATEPART(YEAR,GETDATE()) and DATA>='20050201' );
if (@i is NULL)
begin
select @i = 0 ;
end
INSERT INTO T_NAKL (NAKL,DATA,N_POST_GRUZOOTPR,N_POKUP_PLAT_GRUZPOLUCH,N_MANAGER)
VALUES ((@i+1), CONVERT(varchar(8),GETDATE(),112), @N_POST_GRUZOOTPR, @N_POKUP_PLAT_GRUZPOLUCH, @N_MANAGER);
GO

При этом, если впрямую использовать:

INSERT INTO T_NAKL (NAKL,DATA,N_POST_GRUZOOTPR,N_POKUP_PLAT_GRUZPOLUCH,N_MANAGER)
VALUES ((@i+1), CONVERT(varchar(8),GETDATE(),112), @N_POST_GRUZOOTPR, @N_POKUP_PLAT_GRUZPOLUCH, @N_MANAGER);

то вставка проходит на ура, а если в процедуре - ругается на созданный уникальный индекс...
30 янв 05, 18:16    [1285464]     Ответить | Цитировать Сообщить модератору
 Re: Не пойму...  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37113
автор
то вставка проходит на ура, а если в процедуре - ругается на созданный уникальный индекс...

текст процедуры и ошибку полностью
30 янв 05, 18:35    [1285490]     Ответить | Цитировать Сообщить модератору
 Re: Не пойму...  [new]
Bol
Member

Откуда:
Сообщений: 1427
Сейчас выяснил, что не проходит, оказывается, если нет значения NAKL в данном году. Сейчас малость уточню и формализую вопрос покороче.
30 янв 05, 18:45    [1285496]     Ответить | Цитировать Сообщить модератору
 Re: Не пойму...  [new]
Bol
Member

Откуда:
Сообщений: 1427
Прошу прощения - все работает.

Просто данные реальные и задача стояла, чтобы вдруг с 1 февраля нумерация всех накладных пошла с №1 и до конца года номера росли. А оказалось, что под номером 1 за 2005 год (ибо такая возможность есть у пользователей и им дано право на эти изменения) накладная уже есть. Чтоб не было в дальнейшем накладок сделаю данным
UPDATE T_NAKL set NAKL=-NAKL - тогда наверняка должно быть все в норме.
30 янв 05, 18:56    [1285509]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить