MSSQL - 仅当所有值都不为空时才插入值

Posted

技术标签:

【中文标题】MSSQL - 仅当所有值都不为空时才插入值【英文标题】:MSSQL - INSERT INTO VALUES only if all Values are not null 【发布时间】:2022-01-09 14:37:19 【问题描述】:

所以我有这个查询

"INSERT INTO tblAssetRelations (ParentAssetID, ChildAssetID, Type)
VALUES (
    (SELECT tblAssets.AssetID FROM tblAssets WHERE tblAssets.AssetName = $field2),
    (SELECT tblAssets.AssetID FROM tblAssets WHERE tblAssets.AssetName = $field1),
    12
    );"

如果 VALUES 中的 SELECT 语句之一没有返回值(null),我如何取消/中止 INSERT 语句

ps:$field1 和 $field2 是 powershell 脚本的变量

================================================ =======================

这样的东西会起作用吗?我不确定语法。

declare @Variable1, @Variable2;

set @Variable1 = SELECT tblAssets.AssetID FROM tblAssets WHERE tblAssets.AssetName= $field2
set @Variable2 = SELECT tblAssets.AssetID FROM tblAssets WHERE tblAssets.AssetName= $field1
 
 if @Variable1 IS NOT Null AND @Variable2 IS NOT Null 
    INSERT INTO tblAssetRelations (ParentAssetID, ChildAssetID, Type)
    VALUES (@Variable1, @Variable2, 12);

【问题讨论】:

【参考方案1】:

您可以尝试使用INSERT INTO ... SELECT 语句:

INSERT INTO tblAssetRelations (ParentAssetID, ChildAssetID, Type)
SELECT a, b, c FROM (
  SELECT
    (SELECT tblAssets.AssetID FROM tblAssets WHERE tblAssets.AssetName = $field2) AS a,
    (SELECT tblAssets.AssetID FROM tblAssets WHERE tblAssets.AssetName = $field1) AS b,
    12 AS c
  ) WHERE a IS NOT NULL AND b IS NOT NULL

然后你会用WHERE a IS NOT NULL AND b IS NOT NULL中止INSERT

【讨论】:

不幸的是,这不起作用,因为 WHERE 子句仅适用于列属性,并且在 SELECT 语句之前(在 FROM 表之后)被查询,在 SSMS 中,a、b 和 c 带有下划线(红色)并说“无效的列名”,当我开始查询时出现错误“关键字 WHERE 附近的语法不正确” HAVING代替WHERE怎么样?

以上是关于MSSQL - 仅当所有值都不为空时才插入值的主要内容,如果未能解决你的问题,请参考以下文章

仅当字段不为空时才进行电子邮件验证

仅当对象在一行上不为空时才设置属性[重复]

JPA:仅当结果集不为空时才缓存查询

MongoDb 仅当数组不为空时才在数组中添加字段

仅当搜索框不为空时才显示项目匹配内容

仅当表不为空时,T-SQL 才连接表