Удалить все значения NULL в хранимой процедуре - PullRequest
0 голосов
/ 07 ноября 2019

Я создал следующую хранимую процедуру для запуска exec sp_InsertAirport 'value1','value2', etc.... Однако я получаю ошибку, указанную ниже. Как видите, я пробовал различные методы для удаления нулей, но ни один не работает. Как я могу успешно удалить Nulls в sp, чтобы он мог успешно вставить?

Msg 50000, Уровень 16, Состояние 2, Процедура sp_InsertAirport, Строка 128 [Стартовая Строка 2] Невозможно вставить значение NULL встолбец «Локатор», таблица «DB_Airports.dbo.tbl_Airports»;столбец не допускает пустых значений. Вставить не удается.

USE [DB_Airports]
GO

IF OBJECT_ID('SP_InsertAirport', 'P') IS NOT NULL
DROP PROCEDURE [dbo].[SP_InsertAirport]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[SP_InsertAirport]
@ICAOCode VARCHAR(4) NULL,
@IATACode VARCHAR(3) NULL,
@AirportName VARCHAR(MAX),
@City VARCHAR(MAX),
@Latitude DECIMAL(8,3), --NOT NULL
@Longitude DECIMAL (11,3), --NOT NULL
@Elevation INT,
@CountryName NVARCHAR(MAX)
...
INSERT INTO tbl_Airports(ICAOCode, IATACode, AirportName, City, Latitude, Longitude, Elevation) 
VALUES (@ICAOCode, @IATACode, @AirportName, @City, @Latitude, @Longitude, @Elevation)

UPDATE tbl_Airports SET Latitude ='0' WHERE Latitude IS NULL
UPDATE tbl_Airports SET Longitude ='0' WHERE Longitude IS NULL

DELETE FROM tbl_Airports WHERE Latitude = 0 AND Longitude = 0

END TRY

BEGIN CATCH

COMMIT TRANSACTION
END
GO

1 Ответ

2 голосов
/ 07 ноября 2019

Я думаю, вы просто хотите coalesce():

INSERT INTO tbl_Airports(ICAOCode, IATACode, AirportName, City, Latitude, Longitude, Elevation) 
    VALUES (@ICAOCode, @IATACode, @AirportName, @City,
            COALESCE(@Latitude, 0),
            COALESCE(@Longitude, 0),
            @Elevation
           );

Я думаю, 0 очень плохое значение по умолчанию, потому что это допустимое значение. На экваторе могут быть аэропорты.

...