Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37113 |
текст процедуры и ошибку полностью |
||
30 янв 05, 18:35 [1285490] Ответить | Цитировать Сообщить модератору |
Bol Member Откуда: Сообщений: 1427 |
Сейчас выяснил, что не проходит, оказывается, если нет значения NAKL в данном году. Сейчас малость уточню и формализую вопрос покороче. |
30 янв 05, 18:45 [1285496] Ответить | Цитировать Сообщить модератору |
Bol Member Откуда: Сообщений: 1427 |
Прошу прощения - все работает. Просто данные реальные и задача стояла, чтобы вдруг с 1 февраля нумерация всех накладных пошла с №1 и до конца года номера росли. А оказалось, что под номером 1 за 2005 год (ибо такая возможность есть у пользователей и им дано право на эти изменения) накладная уже есть. Чтоб не было в дальнейшем накладок сделаю данным UPDATE T_NAKL set NAKL=-NAKL - тогда наверняка должно быть все в норме. |
30 янв 05, 18:56 [1285509] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |