Sql 删除存储过程中的所有空值

Sql 删除存储过程中的所有空值,sql,sql-server,stored-procedures,null,Sql,Sql Server,Stored Procedures,Null,我创建了以下存储过程来运行exec sp_InsertAirport'value1'、'value2'等。。但是,我得到下面列出的错误。正如您所看到的,我尝试了各种方法来删除空值,但都不起作用。如何成功删除sp中的空值,使其能够成功插入 Msg 50000,16级,状态2,程序sp_InsertAirport,第128行[批次开始第2行] 无法将值NULL插入表“DB_Airports.dbo.tbl_Airports”的列“Latitude”;列不允许空值。插入失败 我想您只需要coalesc

我创建了以下存储过程来运行
exec sp_InsertAirport'value1'、'value2'等。
。但是,我得到下面列出的错误。正如您所看到的,我尝试了各种方法来删除空值,但都不起作用。如何成功删除sp中的空值,使其能够成功插入

Msg 50000,16级,状态2,程序sp_InsertAirport,第128行[批次开始第2行] 无法将值NULL插入表“DB_Airports.dbo.tbl_Airports”的列“Latitude”;列不允许空值。插入失败


我想您只需要
coalesce()


我认为
0
是一个非常糟糕的默认值,因为它是一个有效值。赤道上可能有机场。

我想你只需要
coalesce()


我认为
0
是一个非常糟糕的默认值,因为它是一个有效值。赤道上可能有机场。

有点绕道,但有些东西你需要阅读。为什么在不知道默认值的情况下使用它们?这就是NULL首先存在的原因。您确实应该将表设计修改为允许NULL,或者如果其中任何一个值为NULL,则根本不插入行。请阅读过程中的逻辑。然后把你写的作为你的问题来读。您的代码以一种断章取义、不合逻辑的方式特别尝试避免插入纬度和经度均为零的行。因此,如果您试图在插入后立即删除空值,那么尝试将空值替换为零是没有意义的。是时候退后一步,谈谈你想要完成的事情了,因为这看起来像是一系列设计拙劣的绷带,用于一项没有明确定义的任务。稍微绕道,但有些东西你需要阅读。为什么在不知道默认值的情况下使用它们?这就是NULL首先存在的原因。您确实应该将表设计修改为允许NULL,或者如果其中任何一个值为NULL,则根本不插入行。请阅读过程中的逻辑。然后把你写的作为你的问题来读。您的代码以一种断章取义、不合逻辑的方式特别尝试避免插入纬度和经度均为零的行。因此,如果您试图在插入后立即删除空值,那么尝试将空值替换为零是没有意义的。是时候退后一步,谈谈你想完成的事情了,因为这看起来像是一系列设计拙劣的绷带,用于一项没有明确定义的任务。
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
INSERT INTO tbl_Airports(ICAOCode, IATACode, AirportName, City, Latitude, Longitude, Elevation) 
    VALUES (@ICAOCode, @IATACode, @AirportName, @City,
            COALESCE(@Latitude, 0),
            COALESCE(@Longitude, 0),
            @Elevation
           );