получаю ошибки на инсерте
не понимаю в чем дело, отдельно код (вне этой ХП) вроде выполняется, а внутри не хочет, такое ощущение, что переменная @IDSource внутри зануляется
ХП
вызов ХП
ps
заодно если подскажете как покрасивее написать - буду благодарен, ибо опыт есть только по простым вещам..
Не удалось вставить значение NULL в столбец "ID_Source", таблицы "DataExchange.dbo.KeyValues"; в столбце запрещены значения NULL. Ошибка в INSERT. |
не понимаю в чем дело, отдельно код (вне этой ХП) вроде выполняется, а внутри не хочет, такое ощущение, что переменная @IDSource внутри зануляется
ХП
+ |
ALTER PROCEDURE [dbo].[Export_Object] @IDSession char(200), -- Сеансовый ключ @KeyHost char(200), -- Имя узла получателя @KeyObject char(200), -- Идентификатор объекта @TypeObject char(200), -- Идентификатор типа объекта @CRC char(200), -- CRC обьекта @Date date, -- дата @Count numeric(18,2), -- количество @Sum numeric(18,2), -- сумма @Currency char(3), -- валюта @comment char(200), -- текстовое описание @Value_1 char(200), -- текстовое поле 1. @Value_2 char(200), -- текстовое поле 2. @Value_3 char(200), -- текстовое поле 3. @Value_4 char(200), -- текстовое поле 4. @Value_5 char(200), -- текстовое поле 5. @Value_6 char(200), -- текстовое поле 6. @Value_7 char(200), -- текстовое поле 7. @Value_8 char(200), -- текстовое поле 8. @Value_9 char(200), -- текстовое поле 9. @Value_Key_1 char(200),-- идентификатор объекта 1 @Value_Key_2 char(200),-- идентификатор объекта 2 @Value_Key_3 char(200),-- идентификатор объекта 3 @Value_Key_4 char(200),-- идентификатор объекта 4 @Value_Key_5 char(200),-- идентификатор объекта 5 @Value_Key_6 char(200),-- идентификатор объекта 6 @Value_Key_7 char(200),-- идентификатор объекта 7 @Value_Key_8 char(200),-- идентификатор объекта 8 @Value_Key_9 char(200) -- идентификатор объекта 9 AS BEGIN DECLARE @IDSource int SELECT @IDSource = ID_Source FROM CurrentSession WHERE (CurrentSession.IDSesion = @IDSession AND CurrentSession.MSid = @@SPID) IF @IDSource IS NULL RAISERROR ('ERROR ID SESSION', 18, 1); -- проверку прошли, получим ID для базы получателя, типа объекта и самого объекта DECLARE @IDDestination int DECLARE @IDType int DECLARE @IDObject int SELECT @IDDestination = ID FROM Sources WHERE (Sources.KeySource = @KeyHost); SELECT @IDType = ID FROM RecordType WHERE (RecordType.Name = @TypeObject); SELECT @IDObject = ID FROM KeyValues WHERE (KeyValues.KeySource = @KeyObject AND KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType); IF (@IDObject IS NULL) BEGIN INSERT INTO KeyValues (KeySource, ID_Source, ID_Destination, ID_Type) VALUES (@KeyObject, @IDSource, @IDDestination, @IDType) SELECT @IDObject = ID FROM KeyValues WHERE (KeyValues.KeySource = @KeyObject AND KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType) END -- пройдем все ссылочные параметры DECLARE @ID_Value_Key_1 int DECLARE @ID_Value_Key_2 int DECLARE @ID_Value_Key_3 int DECLARE @ID_Value_Key_4 int DECLARE @ID_Value_Key_5 int DECLARE @ID_Value_Key_6 int DECLARE @ID_Value_Key_7 int DECLARE @ID_Value_Key_8 int DECLARE @ID_Value_Key_9 int IF (@Value_Key_1 IS NOT NULL) AND (LEN(@Value_Key_1) > 0) AND NOT EXISTS (SELECT ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_1)) INSERT INTO KeyValues (ID_Source, ID_Destination, ID_Type, KeySource) VALUES (@IDSource, @IDDestination, @IDType, @Value_Key_1) IF (@Value_Key_2 IS NOT NULL) AND (LEN(@Value_Key_2) > 0) AND NOT EXISTS (SELECT ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_2)) INSERT INTO KeyValues (ID_Source, ID_Destination, ID_Type, KeySource) VALUES (@IDSource, @IDDestination, @IDType, @Value_Key_2) IF (@Value_Key_3 IS NOT NULL) AND (LEN(@Value_Key_3) > 0) AND NOT EXISTS (SELECT ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_3)) INSERT INTO KeyValues (ID_Source, ID_Destination, ID_Type, KeySource) VALUES (@IDSource, @IDDestination, @IDType, @Value_Key_3) IF (@Value_Key_4 IS NOT NULL) AND (LEN(@Value_Key_4) > 0) AND NOT EXISTS (SELECT ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_4)) INSERT INTO KeyValues (ID_Source, ID_Destination, ID_Type, KeySource) VALUES (@IDSource, @IDDestination, @IDType, @Value_Key_4) IF (@Value_Key_5 IS NOT NULL) AND (LEN(@Value_Key_5) > 0) AND NOT EXISTS (SELECT ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_5)) INSERT INTO KeyValues (ID_Source, ID_Destination, ID_Type, KeySource) VALUES (@IDSource, @IDDestination, @IDType, @Value_Key_5) IF (@Value_Key_6 IS NOT NULL) AND (LEN(@Value_Key_6) > 0) AND NOT EXISTS (SELECT ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_6)) INSERT INTO KeyValues (ID_Source, ID_Destination, ID_Type, KeySource) VALUES (@IDSource, @IDDestination, @IDType, @Value_Key_6) IF (@Value_Key_7 IS NOT NULL) AND (LEN(@Value_Key_7) > 0) AND NOT EXISTS (SELECT ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_7)) INSERT INTO KeyValues (ID_Source, ID_Destination, ID_Type, KeySource) VALUES (@IDSource, @IDDestination, @IDType, @Value_Key_7) IF (@Value_Key_8 IS NOT NULL) AND (LEN(@Value_Key_8) > 0) AND NOT EXISTS (SELECT ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_8)) INSERT INTO KeyValues (ID_Source, ID_Destination, ID_Type, KeySource) VALUES (@IDSource, @IDDestination, @IDType, @Value_Key_8) IF (@Value_Key_9 IS NOT NULL) AND (LEN(@Value_Key_9) > 0) AND NOT EXISTS (SELECT ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_9)) INSERT INTO KeyValues (ID_Source, ID_Destination, ID_Type, KeySource) VALUES (@IDSource, @IDDestination, @IDType, @Value_Key_9) -- получим ID ссылочных параметров SELECT @ID_Value_Key_1 = ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_1) SELECT @ID_Value_Key_2 = ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_2) SELECT @ID_Value_Key_3 = ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_3) SELECT @ID_Value_Key_4 = ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_4) SELECT @ID_Value_Key_5 = ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_5) SELECT @ID_Value_Key_6 = ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_6) SELECT @ID_Value_Key_7 = ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_7) SELECT @ID_Value_Key_8 = ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_8) SELECT @ID_Value_Key_9 = ID FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType AND KeyValues.KeySource = @Value_Key_9) -- записываем основную и вспомогательную таблицу UPDATE KeyValues SET CRC = @CRC, Processed = 0, DataProcessed = Null WHERE (KeyValues.KeySource = @KeyObject AND KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType); IF NOT EXISTS (SELECT ID FROM CurrentPackages WHERE (CurrentPackages.ID_Key = @IDObject AND CurrentPackages.ID_Source = @IDSource AND CurrentPackages.ID_Destination = @IDDestination)) INSERT INTO CurrentPackages (ID_Key, ID_Source, ID_Destination) VALUES (@IDObject, @IDSource, @IDDestination) UPDATE CurrentPackages SET [Date] = @Date, [Lot] = @Count, [Sum] = @Sum, Currency = @Currency, comment = @comment, Value_1 = @Value_1, Value_2 = @Value_2, Value_3 = @Value_3, Value_4 = @Value_4, Value_5 = @Value_5, Value_6 = @Value_6, Value_7 = @Value_7, Value_8 = @Value_8, Value_9 = @Value_9, ID_Value_1 = @ID_Value_Key_1, ID_Value_2 = @ID_Value_Key_2, ID_Value_3 = @ID_Value_Key_3, ID_Value_4 = @ID_Value_Key_4, ID_Value_5 = @ID_Value_Key_5, ID_Value_6 = @ID_Value_Key_6, ID_Value_7 = @ID_Value_Key_7, ID_Value_8 = @ID_Value_Key_8, ID_Value_9 = @ID_Value_Key_9 WHERE (CurrentPackages.ID_Key = @IDObject AND CurrentPackages.ID_Source = @IDSource AND CurrentPackages.ID_Destination = @IDDestination); -- возвращаем не связанные ссылки SELECT KeySource FROM (SELECT * FROM KeyValues WHERE (KeyValues.ID_Source = @IDSource AND KeyValues.ID_Destination = @IDDestination AND KeyValues.ID_Type = @IDType) ) as t1 WHERE ((t1.KeyDestination is null OR len(t1.KeyDestination) = 0) AND (t1.KeySource = @Value_Key_1 OR t1.KeySource = @Value_Key_2 OR t1.KeySource = @Value_Key_3 OR t1.KeySource = @Value_Key_4 OR t1.KeySource = @Value_Key_5 OR t1.KeySource = @Value_Key_6 OR t1.KeySource = @Value_Key_7 OR t1.KeySource = @Value_Key_8 OR t1.KeySource = @Value_Key_9) ) END |
вызов ХП
DECLARE @IDSession1 char(200) DECLARE @KeySource1 char(200) = 'UH_Copy' DECLARE @PassSource1 char(200) = '112' --EXEC [dbo].[Authorization] @KeySource1, @PassSource1, @IDSession1; select @IDSession1 = 'ADAFBA3F-51C4-463A-BF90-37BF6CA618E7' DECLARE @KeyHost1 char(200) = 'Voshod_buh_Copy' DECLARE @TypeObject1 char(200) = 'CashFlow' DECLARE @KeyObject1 char(200)='eerrrr' DECLARE @CRC1 char(200)='45655' DECLARE @Date1 date EXEC [dbo].[Export_Object] @IDSession1, @KeyHost1, @KeyObject1, @TypeObject1, @CRC1, @Date1, 1, 22, '', '', '', '', '', '', '', '', '', '', '', 'rttt', '4eerr', null, null, null, null, null, null, null
ps
заодно если подскажете как покрасивее написать - буду благодарен, ибо опыт есть только по простым вещам..